Zufallszahl zwischen -2,5 und 2,5 in C Sprache?

2 Antworten

1- Erstelle eine Zufallszahl

int r = rand()

2- Teile die Zufallszahl durch die höchstmögliche Zahl, um das Ergebnis auf einen Bereich zwischen 0 und 1 einzuschränken. Das Ergebnis ist natürlich ein double (Kommazahl).

double rand = (double)r / RAND_MAX;

3- Stecke nun den Bereich des Ergebnisses von 0..1 auf 0..5. Indem du es einfach mit 5 multiplizierst.

rand = rand * 5;

Nun hast du eine Zufallszahl zwischen 0 und 5. Jetzt musst du nurnoch 2,5 abziehen, dann liegt sie zwischen -2,5 und +2,5.

rand = rand - 2.5;

Fertig. Das ganze kann man natürlich auch zusammenfassen:

double rand = (double)rand() / RAND_MAX * 5 - 2.5;
Woher ich das weiß:Studium / Ausbildung – Bachelor in Informatik 👨🏻‍🎓

TheKing4 
Fragesteller
 24.01.2021, 14:32

Wie kann ich sie zuletzt ausspucken lassen. Mit printf( und dann?

0
MrAmazing2  24.01.2021, 14:47
@TheKing4
printf("%lf", rand);

%lf steht nämlich für „long float“, gemeint ist damit der Datentyp „double“.

In dem Fall könnte, je nachdem wie genau die Zahl sein soll, auch eine Float-Ausgabe reichen, also

printf("%f", rand);
1

Viele Wege führen ans Ziel. Diese Aufgaben sollte man schon selber durchdenken, um sein logisches Denken zu trainieren, das man fürs Programmieren braucht.

Oft geben funktionen nicht das her was man braucht, und man muss sie geschickt umformen.

rand() generiert eine Zufallszahl zwischen 0 und 32767.

Du könntest die Zahl dann erstmal als Gleitkommazahl speichern und dann dividierst du sie durch den maxWert. Ja nicht übel.

Dann hast du Zufallszahlen zwischen 0 und 1. Wie gehts dann weiter ?


TheKing4 
Fragesteller
 24.01.2021, 14:02

Ich hab mir überlegt dass ich das Ergebnis ja +2,5 machen könnte aber dann wär ich ja bei 1 über meinem Wunsch also 1,5 aber wie komme ich dann in den negativen Bereich

0
Martin7  24.01.2021, 14:06
@TheKing4

Was ist wenn du die von rand() generierte zahl mit 32767/2 subtrahierst. Danach nochmal durch 16383,5 dividierst. Hast du dann nicht die zahlen zwischen -1 und 1 ? :P

0
alfredo153  24.01.2021, 14:09
@TheKing4

Das ist doch simple Unterstufenmathematik. Offenkundig musst du einen Bereich von 0..1 auf einen Bereich von 0...5 spreizen - also multiplizieren. Und dann kannst du das Ganze einfach so schieben, dass es von -2,5 bis 2,5 reicht - also subtrahieren. Ende.

1
TheKing4 
Fragesteller
 24.01.2021, 14:22
@alfredo153
Int main()
{
 float erg;
 erg = (rand()/RAND_MAX)*5;
 printf(„Zahl: %f“ ,erg);
}

ergibt bei mir aber immer 0

0
alfredo153  24.01.2021, 14:24
@TheKing4

Klar. Die ganze Rechenoperation ist ganzzahlig, das ganzzahlige Resultat wird dann in den float erg gesteckt. Du kannst eine Gleitkommadivision erzwingen, indem du mindestens einen der Operanden auf double (oder float) castest.

0