srand() scheint nicht den Startwert für rand zu initialiesieren!



  • Tag!
    ich programmiere seit einiger Zeit bereits und bin auf ein Problem gestoßen mit srand() und rand().

    template<class t>
    void pa_matrix<t>::random_init_d(t von,t bis) {
    	srand(time(NULL));
    	double bereich, zw;
    	if(von>bis)
    		swap(von,bis);
    	bereich=abs(bis-von);
    
    	t *tmp, *com;
    
    	tmp= &array[0];
    	for(com=tmp+get_size() ; tmp<com; ++tmp) {
    			zw = ((double)random() / (double)RAND_MAX) * bereich;
    			(*tmp) = zw + von;
    	}
    }
    

    Dies Funktion einer Matrixklasse(1dim array) füllt einfach alle Zellen mit "zufälligen" werten nur das sie trotz srand() initialiesierung sich nicht ändern.
    Habe auch händisch werte eingesetzt ohne das sich was geändert hat.
    Es kommen einfach immer die selben Zahlen.
    Mit freundlichen Grüßen



  • mach srand(time(0)) nur EINMAL, zum Beispiel als erste Zeile in der main().
    denn time(0) ändert sich nur jede neue Sekunde einmal. das oft oft zu wenig. und es verbessert den zufall ja nicht, wenn man ihn dauernd unterbricht und neu starten läßt.



  • Danje für die schnelle Nachricht, habe als extra member gelöst.
    Wünsche noch einen schönen Baend und Nacht^



  • naja rand() ist nur ein pseudo zufallsgenerator

    sprich wenn man ihn mit einem startwert füllt, wird immer die gleiche "zufällige" folge an ints rauskommen

    wenn du ihn mit der zeit inititalisierst (was ja schon ein guter startwert ist), dann kommt eine recht zufällige folge raus

    und in ner schleife(die ihn sehr kurzer zeit abgearbeitet ist) ändert sich die zeit nicht gross, daher wirst du dann auch nur noch mehr doer weniger gleiche zahlen bekommen die nicht zufällig sind


Log in to reply