zufalle in Qt
-
Hallo,
ich brauche für mein Programm sehr viele wirklich zufällige Zufallszahlen. Ich habe mir deshalb einen professionellen Ranomizer besorgt.
Unter Windows(Microsoft Visual Studio) läuft er gut, unter Linux-Konsole auch, nur wenn ich ein Qt-Projekt erstelle, und die Dateien einbinde produziert der Compiler einen Fehler:
randomc.h:91: syntax error before numeric constant
randomc.h:91: missing ';' before right brace
randomc.h:92: 'TArch' is used as a type, but is not defined as a type.
randomc.h:94: syntax error before `}' tokenDer Code dazu sieht so aus:
class TRanrotBGenerator { // encapsulate random number generator enum constants { // define parameters KK = 17, JJ = 10, R1 = 13, R2 = 9}; public: void RandomInit(long int seed); // initialization int IRandom(int min, int max); // get integer random number in desired interval double Random(); // get floating point random number TRanrotBGenerator(long int seed); // constructor protected: int p1, p2; // indexes into buffer unsigned long randbuffer[KK]; // history buffer unsigned long randbufcopy[KK*2]; // used for self-test enum TArch {LITTLE_ENDIAN, BIG_ENDIAN, NON_IEEE}; //Line 91 TArch Architecture; // conversion to float depends on computer architecture };
Dieser wird dann so verwedet:
TRanrotBGenerator::TRanrotBGenerator(long int seed) { RandomInit(seed); // detect computer architecture union {double f; unsigned long i[2];} convert; convert.f = 1.0; if (convert.i[1] == 0x3FF00000) Architecture = LITTLE_ENDIAN; else if (convert.i[0] == 0x3FF00000) Architecture = BIG_ENDIAN; else Architecture = NON_IEEE;}
Ich weiß echt nicht woran der Fehler liegen könnte, zumal der Code ja sonst funktioniert.
Ich hoffe, mir kann jemand helfen.
-
Vermutlich setzt Qt irgendwo #defines die sich mit dem Random-Code beissen.
-
(OT): Wie werden die "wirklich zufälligen Zahlen" erzeugt?
-
Die Zufallszahlen sind nicht wirklich zufällig. Wirkliche Zufallszahlen kann man mit dem PC nicht erzeugen, doch kommen diese Zufallszahlen dem wirklichen Zufall wesentlich näher als der Standardrandomizer von C++.
Den gesamten Code hier einzustellen, würde zu viel Platz beanspruchen. Wer sich den Code anschauen möchte, kann ihn über www.agner.org/random/ und dort unter "Uniform random number generators in C++" runterladen, es sind auch ausführliche Funktionserklärungen enthalten.