Программирование C, векторная библиотека GSL, ошибка: несовместимый тип для аргумента 1 'gsl_rng_uniform'

Я программирую в Code Blocks в ОС Windows. Мне пришлось использовать некоторые библиотеки GSL в приведенном ниже коде, но я получаю сообщение об ошибке в строке 13, несовместимый тип для аргумента 1 'gsl_rng_uniform.

double randomBR = gsl_rng_uniform(r)*360+6;

и я не знаю, как это исправить. Под сообщением об ошибке в файле gsl_rng.h есть строка 150, показывающая: «ожидается 'const struct gsl_rng *', но аргумент имеет тип 'double'».

#include <stdio.h>
#include <gsl_vector.h>
#include <gsl_rng.h>

int main()
{
gsl_vector*vec=gsl_vector_alloc(100);

double z, max, min, r;
int k=100, i, pos;

for (i=0; i<k; i++){
    double randomBR = gsl_rng_uniform(r)*360+6;
    z=((int)(gsl_rng_uniform)(r)*360+6);
    gsl_vector_set(vec, i, z);
}

max=gsl_vector_max(vec);
pos_vector_max_index(vec);
min=gsl_vector_min)(vec);
pos_vector_min_index(vec);

if (max == 360)
{
    printf("Max number generated in box %d", pos);
}

if (max < 366)
{
    printf("Max number is %f, position %d", max, pos);
}

return 0;
}

c gsl
person B. Inspire    schedule 14.04.2016    source источник
comment
Использование значения неинициализированной переменной, имеющей неопределенный срок автоматического хранения, вызывает неопределенное поведение.   -  person MikeCAT    schedule 14.04.2016


Ответы (2)


Прототип функции

double gsl_rng_uniform (const gsl_rng * r)

Ясно, что для этого требуется константа gsl_rng*, а не двойная. Узнайте больше о документации GSL, вы должны получить rng, сначала инициализировав его, используя gsl_rng_alloc:

gsl_rng * r = gsl_rng_alloc (gsl_rng_taus);

Затем вы передаете этот gsl_rng r функции uniform, чтобы получить нужные вам случайные числа.

Попробуйте прочитать документы здесь:

http://www.gnu.org/software/gsl/manual/html_node/Random-number-generator-initialization.html#Random-number-generator-initialization

http://www.gnu.org/software/gsl/manual/html_node/Sampling-from-a-random-number-generator.html

person fluter    schedule 14.04.2016

Согласно Научная библиотека GNU - Справочник Вручную: выборка из генератора случайных чисел, gsl_rng_uniform() примет const gsl_rng * r и не примет double, который является типом r.

Инициализируйте генератор случайных чисел с помощью gsl_rng_alloc(). и передать инициализированный генератор случайных чисел.

person MikeCAT    schedule 14.04.2016