seltsames verhalten beim erzeugen von zufallszahlen mit rand()



  • hallo,

    ich experimentiere gerade mit zufallszahlen, die ich für mein nächstes programm brauchen werde, und bin dabei auf ein für mich nicht nachvollziebares verhalten gestoßen.

    float zahl, zahl2, zahl3, zahl4;
    
    zahl=(0 + (rand() % (100 - 0 + 1)));
    zahl2=(1 + (rand() % (8 - 1 + 1)));
    zahl3=zahl/zahl2;
    zahl4=(0 + (rand() % (100 - 0 + 1))) / (1 + (rand() % (8 - 1 + 1)));
    
    printf("Zahl: %f\nZahl2: %f\nZahl3: %f\nZahl4: %f\n", zahl, zahl2, zahl3, zahl4);
    

    während zahl3, wie erwartet, hin und wieder mit nachkommastellen ungleich 0 ausgegeben wird ist zahl4 immer eine ganze zahl.

    kann mir jemand sagen, wie das zu erklären ist? 😕

    mit freundlichen grüßen
    sebingel



  • Das dürfte daran liegen, dass du Ganzzahlen dividierst. Folglich ist das Ergebnis auch eine Ganzzahl. Du kannst die beiden Seiten deiner Division ja einfach nach float casten, dann sollte es klappen.



  • danke für die schnelle antwort.

    nun funktioniert es.

    zahl4=(float)(0 + (rand() % (100 - 0 + 1))) / (1 + (rand() % (8 - 1 + 1)));
    

    wieder etwas gelernt 😉



  • Ich sagte zwar, caste beide Seiten der Division, aber so wie du es gemacht hast, ist es genauso richtig. Es reicht, wenn ein Element ein float-Wert ist. Das Ergebnis ist dann ebenfalls float.


Anmelden zum Antworten