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 `}' token

    Der 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.


Anmelden zum Antworten