Der Martin: C++ (Pseudo-)Zufallszahl generieren

Beitrag lesen

Hi,

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

  
ja, stimmt. Ich hatte das wohl mit Math.random() in JS verwechselt.  
  

> Also müsste es so sein?  
> `random24 = rand() % 2<<23 + 2<<24 - 1`{:.language-c}  
  
Fast. Die Untergrenze deines gewünschten Bereichs ist aber nicht 2^24, sondern 2^23.  
  

> > 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?  
  
Nein, `2^23`{:.language-c} wird in C zu 21:  
  
     0000 0010  
 xor 0001 0111  
 -------------  
     0001 0101  (21)  
  

> > Und hast du vielleicht auch übersehen, dass rand() einen Wert vom Typ float oder double im Intervall [0.0, 1.0[ liefert?  
> Laut [Reference](http://www.cplusplus.com/reference/cstdlib/rand/) sollte es ein Integer sein?!  
  
Siehe oben, da war \_ich\_ schief gewickelt.  
  
Ciao,  
 Martin  

-- 
Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(