Zufallsgenerator gibt immer das gleiche aus



  • Hallo Com 🙂

    Hier den Code dazu:
    Das ist meine Klasse dice, vereinfacht:

    Dice::Dice()
    {
    	std::default_random_engine seeder;
    	std::uniform_int_distribution< unsigned int > roll( 1, 6 );
    	for ( unsigned int i = 0; i != 5; ++i )
    		rolls_.push_back( roll(seeder) );
    }
    
    void Dice::show()
    {
    	for( unsigned int i = 0; i < rolls_.size(); ++i )
    		std::cout << rolls_[i] << '\n';
    }
    

    und das die main:

    int main()
    {
    	Dice dice_1;
    	dice_1.show();
    	Dice dice_2;
    	dice_2.show();
    	std::cin.get();
    }
    

    Wenn ich das ganze kompiliere, kommt für dice_1 und 2 das gleiche raus. Egal wie oft ich kompiliere, es kommt immer 31356 raus.
    Wie kann ich das ändern?
    Vielen dank im Voraus und nochn schönen Sonntag 🙂



  • mit der aktuellen Zeit als seed initialisieren wäre ein Anfang.



  • Der Seeder sollte einen Parameter übergeben bekommen, z.B. die aktuelle Zeit. Außerdem solltest du ihn nur einmalig am Programmanfang initialisieren.



  • Der Trick mit der aktuellen Zeit dient dazu, dass der Zufallsgenerator bei jedem* Programmstart andere Werte erzeugt.

    *sofern er nicht in der selben Sekunde ist.



  • Vielen Dank für den Denkanstoß. Das mit der Zeit wusste ich nicht. Hab das so gelöst wie auf C++ Reference:

    unsigned int tic = std::chrono::system_clock::now().time_since_epoch().count();
    std::default_random_engine seeder( tic );
    

    👍


Anmelden zum Antworten