2012-03-23 3 views
-1

Ich benutze GCC 4.2 unter Mac OS X 10.7.3. Alles funktionierte gut, bis ich es aktualisiert habe. Ich habe absolut keine Ahnung, warum es nicht mehr funktioniert.rand() gibt Werte, die sehr nahe beieinander liegen

Das Problem ist wie folgt:

rand() mir gibt Werte zurück, die einander sehr nahe sind, aber nicht gleich. Nachdem ich das Programm mehrmals ausgeführt habe, bekomme ich Antworten wie.

Die Ausgabe von:

(double)rand()/(double)RAND_MAX. 

0.945264, 
0.945295, 
0.945335 

(Der Unterschied wird größer, wenn mehr Zeit vergangen ist.) ich es Same srand(time(NULL)); verwenden, und es funktioniert gut, bis nur eine Stunde vor, als ich es aktualisiert habe. Ich habe es jetzt 20 Mal getestet, und alle Ausgaben sind ca. das gleiche, das ist sicherlich NICHT zufällig. Irgendwelche Ideen? EDIT

#include <stdlib.h> 
main() 
{ 
srand(time(NULL)); 
printf("%f",(double)rand()/(double)RAND_MAX); 
} 

(Das ist mein all-Code ist, sorry ich mit Formatierung saugen.)

+2

Bitte senden Sie eine [** minimal ** Testfall] (http://sscce.org). –

+0

Bis du * was * aktualisiert hast? –

+0

Bis ich meinen Compiler aktualisiert habe, gcc. – ClausW

Antwort

-3

Wenn Sie es mit time(NULL) sehe ich es immer dicht beieinander sein glauben, weil die Zeit langsam erhöht wird . Sie werden feststellen, dass sich Ihre Zufallszahl im Laufe der Zeit geringfügig ändert.

Try this:

(double)srand(time(NULL))/(double)RAND_MAX. 

-------- -------- EDIT

Sieht aus wie meine ursprüngliche Annahme falsch war . Ich lief das und bekomme sehr unterschiedliche Zufallszahlen, ohne erneut zu seeden.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void) 
{ 
    int i, p; 

    srand(time(NULL)); 

    for(p=0;p<10;p++){ 
    i = rand(); 

    printf ("Your random number is %d\n", i); 

    } 
    return(0); 
} 
+1

Das folgt nicht unbedingt. In der Nähe befindliche Seeds übersetzen nicht notwendigerweise in in der Nähe liegende Zufallszahlen. –

+0

@OliCharlesworth - Richtig, aber ich denke, er sät nur einmal. Anstelle des Seeding wird jede Zufallszahl abgeholt. Dies ist jedoch nur eine Annahme, er hat nicht genug Code gepostet. – ProfessionalAmateur

+0

Nun, es ** hat ** richtig funktioniert, und allgemein 'srand (Zeit (NULL))' ist der richtige Weg zum Erstellen von Zufallszahlen. – ClausW

0

Dies kann eine andere possbility sein:

Ich denke, es ist Ihre Platzierung Ihrer srand

Wenn ich diesen Beitrag

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    for(i=0;i<4;i++){ 
     srand(time(NULL)); 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

ich dieses Ergebnis zu erhalten

0.314774 
0.314774 
0.314774 
0.314774 
Aber

, wenn ich die srand außerhalb der Schleife bewegen erhalte ich verschiedene Zufalls numers

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    srand(time(NULL)); 
    for(i=0;i<4;i++){ 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

ich diese Ergebnisse

0.154158 
0.832643 
0.529257 
0.529633 
Verwandte Themen