2016-04-14 3 views
0

Ich programmiere in Code-Blöcke unter Windows OS. Ich hatte unter einige der GSL-Bibliotheken im Code zu verwenden, aber ich erhalte eine Fehlermeldung auf der Leitung 13, unvereinbar Typen für Argument 1 von ‚gsl_rng_uniformC-Programmierung, GSL-Vektorbibliothek, Fehler: inkompatible Art für Argument 1 von 'gsl_rng_uniform'

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

und ich weiß nicht, wie es zu beheben. Unter der Fehlermeldung befindet sich die Zeile 150 in der Datei gsl_rng.h: "erwartet" const struct gsl_rng * 'aber das Argument ist vom Typ' 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

Verwendung Wert von nicht initialisierten Variablen automatische Speicherdauer aufweist, die unbestimmt ist, ruft * undefiniert Verhalten *. – MikeCAT

Antwort

0

Der Funktionsprototyp ist

double gsl_rng_uniform (const gsl_rng * r) 

Natürlich ist es ein const gsl_rng * erfordert, kein Doppel. mehr über die GSL-Dokumentation lesen, müssen Sie einen RNG erhalten, indem es zuerst initialisiert, gsl_rng_alloc mit:

gsl_rng * r = gsl_rng_alloc (gsl_rng_taus); 

Dann, dass Sie passieren gsl_rng r die einheitliche Funktion Zufallszahlen, die Sie wollen.

Versuchen Sie die Dokumentation hier zu lesen:

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

Verwandte Themen