Rückgabewert von int rand()



  • Hiya,

    folgender Code:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
      unsigned int keim;
    
      cout << "Zufallsgenerator initialisieren mit: ";
      cin >> keim;
    
      srand(keim);
    
      for(int i = 0; i < 10; i++)
      {
        cout << "Zufallszahl Nr." << i + 1 << ": " << rand() << endl;
      }
      return 0;
    }
    

    Nun, nach meinem Buch "C++ Lernen und professionell anwenden" sollten hier zahlen zwischen 0 und 32767 rauskommen. -> Aufgrund des Datentyps int von rand().

    Jedoch krieg ich folgendes:

    bash-2.05b$ ./a.out
    Zufallsgenerator initialisieren mit: 10
    Zufallszahl Nr.1: 1215069295
    Zufallszahl Nr.2: 1311962008
    Zufallszahl Nr.3: 1086128678
    Zufallszahl Nr.4: 385788725
    Zufallszahl Nr.5: 1753820418
    Zufallszahl Nr.6: 394002377
    Zufallszahl Nr.7: 1255532675
    Zufallszahl Nr.8: 906573271
    Zufallszahl Nr.9: 54404747
    Zufallszahl Nr.10: 679162307

    Wie kommen diese größeren Zahlen zu stande?



  • dann ist beim g++ RAND_MAX größer als 32767. int kann viel größere zahlen als 32... aufnehmen. Wir sind hier nicht bei Visual Basic. 😉



  • Dein Rechner ist zu neu. Früher (als die Rechner noch 16-bit-Register hatten) hatten Integer meistens noch 2 Byte, ein long 4. Inzwischen haben meistens auch ints 4 byte und fassen dementsprechend mehr. Die Größe ist aber nicht festgelegt, es gilt nur:

    sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

    und analog

    sizeof(float) <= sizeof(double) <= sizeof(long double)



  • Der Buchautor verbreitet da anscheinend "Wahrheiten" aus der 16bit-Zeit. rand liefert Zahlen im Bereich von 0 bis RAND_MAX. RAND_MAX kann natürlich manchmal 32767 sein, muss es aber nicht.



  • Soso, thx 😃

    Jetzt wo ihr das erwähnt habt, suchte ich im Buch die Tabelle mit den Datentypen und ihren Wertebereichen. Jedenfalls sind da die Wertebereiche von int für 2 Byte UND für 4 Byte aufgeführt...

    Musst ich wohl irgendwie überlesen haben 😃

    thx nochma 🙂

    Edit:

    signed int
    2 Byte: -32768 bis +32767
    4 Byte: -2147483648 bis +2147483647


Anmelden zum Antworten