Wie kann ich eine Zufallszahl zwischen x und y berechnen?

... komplette Frage anzeigen

2 Antworten

Ich denke, daß "rumprobieren" Dein Problem ist.
Erst mal kurz nachdenken hilft eher.
Also:

mit random() kriegst Du eine gleichverteilte Zufallszahl zwischen 0 und 1 (eine Double).
Was Du willst ist eine zwischen 80 und 510.
Du musst also den Bereich 0..1 "spreizen" in 80..510.

Das neue Intervall ist 80..510 oder auch: 80 + (0..510-80).
Also 80 + (0..430).
Ergo: x = random() * 430 + 80.
Das ist jetzt aber immer noch eine gleichverteilte Double zwischen 80 und 510. Durch casten auf int wird daraus eine Ganzzahl. 80..510.

Das Problem daß Du jetzt noch hast:

Deine Zufallszahlen sind schlecht, weil z.B. 510 so gut wie nie vorkommen wird (denk mal kurz darüber nach: der int-cast rundet runter auf die nächste Ganzzahl.
Wie oft kommt dabei 510 raus?

Um es richtig zu machen, solltest Du also dafür sorgen, daß alle Zahlen gleich oft vorkommen...

Das überlass ich Dir als Denkaufgabe ;-D

PS:
ich nehme dazu übrigens eine Programmiersprache, bei der ich nur sagen muss: "Random nextIntegerBetween:80 and:510" und die macht es richtig für mich. Leider ist diese Sprache nicht mehr Mainstream, weil "veraltet".

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von sarahj
29.12.2015, 19:16

tatsächlich kommt 510 nie vor, wenn random (wie ich vermute) Zahlen aus dem halboffenen Interval [0..1[ liefert.
(aber das hängt von der Bibliotheksfunktion ab - also nachlesen).
Wenn aus dem geschlossenen Interval [0..1], dann kommt 510 einmal alle paar hundert Jahre vor ;-(), wenn überhaupt.

Es gibt (in Java) ein Random.nextInt(int), das besser ist...

1

Die Sprache, in der Du es anscheinend versuchtst, kenne ich nicht. Ich nehme also mal an, dass es eine Funktion rnd() gibt, die eine Zufallszahl zwischen 0 und 1 produziert. Dann sollte Folgendes eine Zufallszahl zwischen 80 und 510 liefern:

x = int(430*rnd() + 80)

510 - 80 = 430 - das ist also die Breite des Bereichs, in dem die Zufallszahlen liegen sollen, und dann muss man halt noch den Mindestwert addieren und eine Ganzzahl draus machen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Patrolman449
29.12.2015, 18:01

Hab vergessen:

der code ist aus java

0
Kommentar von sarahj
29.12.2015, 19:19

ist "fast" richtig ;-D

0

Was möchtest Du wissen?