Nick: C++ (Pseudo-)Zufallszahl generieren

Beitrag lesen

Hallo,

random24 = rand() * 2^23 + 2^23;
Kann es sein, dass dir ein Fehler passiert ist?

oder vielleicht dir beim Interpretieren?

Ah, ok. die Reference sagt
„A typical way to generate trivial pseudo-random numbers in a determined range using rand is to use the modulo of the returned value by the range span and add the initial value of the range:“

v2 = rand() % 100 + 1;     // v2 in the range 1 to 100  
v3 = rand() % 30 + 1985;   // v3 in the range 1985-2014

Also müsste es so sein?
random24 = rand() % 2<<23 + 2<<24 - 1

Möglicherweise hast du übersehen, dass der Operator ^ in C/C++ nicht für Potenzierung steht, sondern für bitweises XOR,

Ja, das wusste ich nicht. Bedeutet das, dass 2^23 zu 26 (11010) wird?

und dass die Formel, so wie Gunnar sie hingeschrieben hat, nur abstrakt gemeint war?

Oh, sie war in Code-Tags gefasst. Daher nahm ich an, dass es auch Code ist.

Und hast du vielleicht auch übersehen, dass rand() einen Wert vom Typ float oder double im Intervall [0.0, 1.0[ liefert?

Laut Reference sollte es ein Integer sein?!

Ach, und bevor du 2^23 tatsächlich durch Potenzieren bildest: Zweierpotenzen notiert man am effizientesten per Bit-Shift, also hier z.B. (1<<23). Oder man schreibt's direkt als ausgerechnete Konstante hin, aber dann ist meist nicht so klar erkennbar, was man meint.

Danke für die Erklärung! Siehe oben.

Grüße