Wie kann ich eine Zufallszahl zwischen x und y berechnen?

2 Antworten

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.


Patrolman449 
Beitragsersteller
 29.12.2015, 18:01

Hab vergessen:

der code ist aus java

0
Hupfdohler  29.12.2015, 19:21
@Patrolman449

Auch in Java sollte das ungefähr sp funktionieren, wie ich es beschrieben habe. Statt "rnd" heißt es dann halt vielleicht "random", vielleicht muss man auch noch anderes anpassen. Mit Java habe ich seit längerem nichts mehr zu tun, viel war es eh nicht, mit den Details kenne ich mich also nicht aus.

0
sarahj  29.12.2015, 19:19

ist "fast" richtig ;-D

0

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".


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