Grosse Zufallszahlen mit rand()
-
Hallo.
Habe das Problem, dass rand() mir Zufallszahlen bis max. 32768 generiert. Dafür sei die Konstante RAND_MAX zuständig.
Da rand() jedoch ein 'int' zurückgibt und 'int' bei c++/Intel CPUs 4 Byte gross ist, hätte ich eigentich gerne, dass rand() eine grössere Zahl zurückgibt.. wie kann man RAND_MAX neu definieren?
Meine Zufallszahl müsste 9 Stellen besitzen.
-
sky21 schrieb:
Hallo.
Habe das Problem, dass rand() mir Zufallszahlen bis max. 32768 generiert. Dafür sei die Konstante RAND_MAX zuständig.
Da rand() jedoch ein 'int' zurückgibt und 'int' bei c++/Intel CPUs 4 Byte gross ist, hätte ich eigentich gerne, dass rand() eine grössere Zahl zurückgibt.. wie kann man RAND_MAX neu definieren?
Meine Zufallszahl müsste 9 Stellen besitzen.
a) zusammenstückeln
return rand()|(rand()<<10)|(rand()<<20);b) nen bessern generator nehmen
//seeds ungetestet#ifndef RANDOM_HPP #define RANDOM_HPP #include "types.hpp" //multiply-with-carry prng //quelle //http://cliodhna.cop.uop.edu/~hetrick/na_faq.html //TODO: testen, ob alle seeds!=0 gute seeds sind class Random{ private: u64 x; public: Random(u64 seed){ x=seed|(u64(1)<<32); } u32 operator()(){ x=1967773755*(x&0xffffffff)+(x>>32); return x; } }; #endif
-
volkard schrieb:
return rand()|(rand()<<10)|(rand()<<20);
Das habe ich auch schon versucht, 3 Blücke à 3 Zeichen grosse Zahlen zu generieren und zusammenzusetzem.
Das Problem ist hier jedoch, dass die Gesamtzahl dann noch Modulo <2-Stellige Primzahl> 0 ergeben muss.
In der Praxis geht das eben leider verdammt lange, muss so ein Fall gefunden wird...
-
sky21 schrieb:
volkard schrieb:
return rand()|(rand()<<10)|(rand()<<20);
Das habe ich auch schon versucht, 3 Blücke à 3 Zeichen grosse Zahlen zu generieren und zusammenzusetzem.
Das Problem ist hier jedoch, dass die Gesamtzahl dann noch Modulo <2-Stellige Primzahl> 0 ergeben muss.
In der Praxis geht das eben leider verdammt lange, muss so ein Fall gefunden wird...berechne doch einfach den bigrand und dann b=int(b/97)*97;
-
sky21 schrieb:
Das Problem ist hier jedoch, dass die Gesamtzahl dann noch Modulo <2-Stellige Primzahl> 0 ergeben muss.
In der Praxis geht das eben leider verdammt lange, muss so ein Fall gefunden wird...So 'ne Zahl ist auch nicht zufällig.
Bye, TGGC (Demo or Die)