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