Zufallszahlen erzeugen



  • Der Seed-Wert kann, muss aber nicht dem "vorherigen" Wert entsprechen.



  • Hallo,

    @volkard: Sünthaxkqs 👍 😃

    Ja, mir wird der Rest der Divion durch 10 zurückgegeben. Na und! Irgendwie komme ich nicht hinter diese Zeile:

    return (rand() % (ende+1 - start) + start);

    Könnt Ihr mir bitte die Funktionsweise sagen? Das wäre nett...

    Vielen dank
    lg, freakC++


  • Mod

    hustbaer schrieb:

    Der Seed-Wert kann, muss aber nicht dem "vorherigen" Wert entsprechen.

    Es ist aber eine gute Lüge für Leute, die seeds nur oberflächlich verstehen wollen ohne die technischen Details.


  • Mod

    freakC++ schrieb:

    Hallo,

    @volkard: Sünthaxkqs 👍 😃

    Ja, mir wird der Rest der Divion durch 10 zurückgegeben. Na und! Irgendwie komme ich nicht hinter diese Zeile:

    return (rand() % (ende+1 - start) + start);

    Könnt Ihr mir bitte die Funktionsweise sagen? Das wäre nett...

    Vielen dank
    lg, freakC++

    Denk doch mal nach: Wenn du modulo 10 rechnest, welche Werte können dann als Ergebnis herauskommen?



  • Wie schon gesagt...es kommt der Rest raus, der bei einer Division durch 10 entsteht, also immer die letzte Ziffer der Zahl. Aber was bringt mir das bei dieser Zeile:

    return (rand() % (ende+1 - start) + start);

    Irgendwie stehe ich voll aufm Schlauch! Jetzt macht es nicht so spannend! :p

    lg, freakC++



  • Ja guck dir einfach die Teile an, guck dir an was die Teile bedeuten, dann ist sofort klar was es soll.

    (ende + 1 - start) ist z.b. was?



  • freakC++ schrieb:

    Wie schon gesagt...es kommt der Rest raus, der bei einer Division durch 10 entsteht, also immer die letzte Ziffer der Zahl. Aber was bringt mir das bei dieser Zeile:

    return (rand() % (ende+1 - start) + start);

    Irgendwie stehe ich voll aufm Schlauch! Jetzt macht es nicht so spannend! :p

    lg, freakC++

    Setz doch einfach Zahlen ein:

    rand() liefterte beispielsweise 160

    `start = 5

    ende = 100

    (160 % (100+1 - 5) + 5)

    = (160 % 96) + 5

    = 64 + 5

    = 69`

    Die Zufallszahl liegt also im Intervall [5, 100]

    Das ist alles...



  • mmh...und was soll die +1?

    lg, freakC++


  • Mod

    freakC++ schrieb:

    Wie schon gesagt...es kommt der Rest raus, der bei einer Division durch 10 entsteht, also immer die letzte Ziffer der Zahl.

    Denk nicht so sehr im Zehnersystem! Wenn du irgendeine Zahl modulo X rechnest, können als Ergebnis nur Werte zwischen 0 und X (inklusive 0 avber exklusive 😵 herauskommen. Das ist der ganze Trick hier.



  • SeppJ schrieb:

    freakC++ schrieb:

    Wie schon gesagt...es kommt der Rest raus, der bei einer Division durch 10 entsteht, also immer die letzte Ziffer der Zahl.

    Denk nicht so sehr im Zehnersystem! Wenn du irgendeine Zahl modulo X rechnest, können als Ergebnis nur Werte zwischen 0 und X (inklusive 0 avber exklusive 😵 herauskommen. Das ist der ganze Trick hier.

    Genau, und damit sollte die Formel dann klar sein. Nochmal mein Beispiel:
    (160 % (100+1 - 5) + 5)

    = (160 % 96) + 5
    Aus der generierten Zufallszahl wird mit Modulo eine Zahl zwischen 0 und 95 ermittelt.

    = 64 + 5

    Da der Intervall, aber zwischen 5 und 100 liegt wird noch 5 dazuaddiert.

    Du hast also nun definitiv eine Zahl zwischen 5 und 100.

    = 69

    In diesem Fall 69.



  • Achso...ja dann wird mir alles klar! Super 👍

    Vielen Dank für eure Hilfe
    lg, freakC++


Anmelden zum Antworten