zufallszahlen ausgeben



  • wie kann man in c++ zufallszahlen ausgeben???

    ich hab folgendes geschrieben:

    int main()
    {
    for(int i=0;i<10;i+=1)
    {
    cout << rand() % 100;
    cin.get();
    }
    }

    aber die zahlen sind immer die gleichen



  • Mach vorher noch ein srand(time(0)) oä, dann wirds besser.



  • danke schon mal für die antwort

    aber jetzt kommt oft eine zahl bei zwei programmstarts hintereinander vor



  • nman schrieb:

    Mach vorher noch ein srand(time(0)) oä, dann wirds besser.

    oder noch 'zufälliger': srand(time(0)*1000)



  • srand(time(0)*1000)

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
        cout << time(0) << endl;
        cout << time(0)*1000 << endl;
        getch();
    }
    

    1093779656
    -1437004480

    Negative Zahlen für srand(...) ? Früher stand da mal ein cast auf unsigned int davor, das hat seinen Grund! 😉

    rand() arbeitet wie folgt:

    int rand() 
    { 
          return(((seed_ = seed_ * 214013L + 2531011L) >> 16) & 0x7fff); 
    }
    


  • Erhard Henkes schrieb:

    Negative Zahlen für srand(...) ?

    das macht nichts. für srand ist das 'ne grosse positive zahl.

    void  srand ( unsigned int seed );
    


  • net schrieb:

    nman schrieb:

    Mach vorher noch ein srand(time(0)) oä, dann wirds besser.

    oder noch 'zufälliger': srand(time(0)*1000)

    wieso wird das zufälliger?



  • Gerard schrieb:

    wieso wird das zufälliger?

    nicht wirklich. aber wenn man das programm öfter nacheinander startet, dann sind die ergebnisse des ersten rand()-aufrufes unterschiedlicher



  • net schrieb:

    Gerard schrieb:

    wieso wird das zufälliger?

    nicht wirklich. aber wenn man das programm öfter nacheinander startet, dann sind die ergebnisse des ersten rand()-aufrufes unterschiedlicher

    wieso machen dann nicht die lib programmierer ein *1000 in srand rein? und von welche implementierung gehts du aus? weil ich glaube das *1000 quatch ist.



  • Die Formel für rand() steht oben. Damit könnt ihr es checken. 😉



  • Gerard schrieb:

    wieso machen dann nicht die lib programmierer ein *1000 in srand rein? und von welche implementierung gehts du aus? weil ich glaube das *1000 quatch ist.

    naja, es liegt daran, dass time() nur jede sekunde einen anderen wert zurückgibt. wenn man das programm jede sekunde starten würde (srand wird also 1mal pro sekunde aufgerufen), hat man ungefähr folgenden output (wenn der erste aufruf von time() 0 zurückgibt, der zweite 1 usw.):
    --> compiler ist msvc 7

    38, 41, 45, 48, 51, 54, 58, 61, 64, 68
    

    bei time()*1000 schaut's dann so aus:

    38, 3304, 6569, 9835, 13100, 16366, 19632, 22897, 26163, 29428
    

    die erste zahlenreihe ist z.b. äusserst schlecht zu gebrauchen, wenn man aus irgendeinem grund grössere werte als z.b. 100 braucht.
    aber wie gesagt, das gilt dann, wenn man srand() wiederholt aufruft (was man im normalfall ja nicht machen soll). ansonsten ist 'srand(time(0))' völlig ok.


Anmelden zum Antworten