Problem



  • Hi,

    warum funktioniert folgendes nicht (es wird nur 0 0 ausgegeben):

    srand(time(0));
    
    // ...
    
    double x, y;
    for (int i = 1; i <= anzDurchlaeufe; i++) {
    	while ((x > 1.0e1)||(y > 1.0e1)) {
    		x = double(rand())/10.0e1;
    		y = double(rand())/10.0e1;
    	}
    	cout<<x<<" "<<y<<"\n";
    }
    

    Danke! 😃



  • Hast du mal versucht, die beiden Variablen sauber zu initialisieren? (btw, das ist die seltsamste Methode, den Wertebereich der Zufallszahl auf ein gegebenes Intervall einzuschrĂ€nken :D)

    PS: Der Beitragstitel und deine Unterschrift sind nicht gerade hilfreich



  • Wie soll ich's jetzt machen? Was ist falsch dran? Der %-Operator gibt's
    ja nicht fĂŒr double!



  • Nein, aber den Divisions-Operator: x = rand()/((double)RAND_MAX+1); (alternativ könntest du auch mit fmod() hantieren ;))



  • Hab's jetzt so gemacht:

    double x, y;
    for (int i = 1; i <= anzDurchlaeufe; i++) {
    	x = fmod(double(rand()),double(1));
    	y = fmod(double(rand()),double(1));
    	cout<<x<<" "<<y<<"\n";
    	if (sqrt(x*x+y*y)<1.0e1)
    		++anzKreis;
    }
    

    Aber warum wird immer noch 0 0 ausgegeben????????????? ( 😡 )



  • double rand_between(double min, double max)
    {
        return min + rand() * (max-min)/RAND_MAX;
    }
    


  • Ja, was erwartest du auch, wenn du den Modulo aus einer ganzen Zahl (auch wenn der Zufallswert in double konvertiert wurde, kommen da nirgends Nachkommastellen her) mit 1 berechnen willst? Die Division geht exakt auf, also ist der Divisionsrest verstĂ€ndlicherweise 0.

    (dort oben habe ich auch eine Möglichkeit angegeben, wie du brauchbar skalierte Zufallswerte geliefert bekommst)

    PS: Du kennst nicht zufÀllig einen gewissen "Xands"?



  • DDDDDDDDDAaaaaaaaaaaaaaaaaaaaaaaaaanke!!!!!!!


Log in to reply