2016-04-14 12 views
0

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

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

, и я не знаю, как это исправить. В сообщении об ошибке в файле gsl_rng.h отображается строка 150, в которой показано: «expected» 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; 
} 
+0

Используя значение неинициализированной переменной, имеющей автоматический срок хранения, который является неопределенным, вызывает * неопределенное поведение *. – MikeCAT

ответ

0

Функция прототип

double gsl_rng_uniform (const gsl_rng * r) 

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

gsl_rng * r = gsl_rng_alloc (gsl_rng_taus); 

Тогда вы передаете, что gsl_rng г равномерной функции, чтобы получить случайные числа, которые вы хотите.

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

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

0

Согласно GNU Scientific Library – Reference Manual: Sampling from a random number generator, gsl_rng_uniform() примет const gsl_rng * r, и он не будет принимать double, который является типом r.

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