lol random?!?!



  • lol!
    in meinem buch sind so übungsaufgaben. und da war jetz eine dabei da hieß es per eingabe random initialisieren und dann 20 zufallszahlen ausgeben.

    ok hab ich gemacht. dann hab ich aus langeweile noch ein bisschen rumgespielt und dabei is mir extrem aufgefallen das der random befehl nich wirklich zufällig seine zahlen ausgibt ... jedoch gibt er seine zahlen entsprechend der initialisierung aus.

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
      int y;
      cout << "\Ngib eine Zahl ein: " << endl;
      cin >> y;
      srand(y);
      int erg=0;
    
      for(int integ=rand(),z=1;z<=25;++z,++integ)
      {
        srand((erg%integ)*rand()/(integ*y));
        integ=rand();
        erg+=integ;
        cout << z << ".\t" << integ << endl;
        cout << "summe bisheriger zahlen: " << erg << endl;
      }
      cout << "durchschnitt der zahlen: " << erg/25 << endl
           << "eingabe war: " << y << endl;
    
      // ending
      int cyx;
      // cin >> cyx;
      return 0;
    }
    

    wenn ich jetzt aber 235 oder 666 eingeb ... rauskommen tut immer nur 346 und das 25 mal hintereinander ... compiled und versuchts selber und dann mal mit ner anderen zahl zum test...
    und wie kann man evtl n bissl zufälligere zahlen ausgeben?

    greetz
    paprika



  • Ja das liegt daran das es in einem Computer keinen Zufall gibt und er somit eigentlich auch keine Zufallszahlen erzeugen kann. Deshalb wird srand hier ein Wert übergeben aus dem rand dann eine Reihe unterschiedlicher Zahlen ableitet.
    Deshalb sollte srand auch immer mit der Zeit initialisiert werde das er immer andere Zahlen ausspuckt.

    Bsp:

    srand(time(0));
    for(int i = 0; i < 20; i++)
    {
        cout << rand() % 100;
    }
    


  • paprika schrieb:

    for(int integ=rand(),z=1;z<=25;++z,++integ)
    {
        srand((erg%integ)*rand()/(integ*y));
    

    Achja ist mir gerade noch aufgefallen, du solltest srand nur einmal initialisieren, kein wunder wen so bei den zufallszahlen ziemlicher mist rauskommt.
    Gruß wolle



  • wie initialisier ich das mit der zeit?
    /e habs net gesehn ... müde ^^



  • wie wolle schon schrieb mit

    srand(time(0));
    

    vor dem aufruf von rand();
    😃

    edit --> und ich dein edit nicht oder ich war davor kp..
    😃



  • hmm rando... zufälliger weise hast du warscheinlich grad da geschrieben als ich meinen edit gemacht hab.
    und irgendwie gibts jetzt ausser 2 beiträgen hier keinen post mehr der nicht editiert wurde 😉
    ich hoffe der hier bleibt wenigstens editfree 😃

    greetz
    paprika



  • Das die rand Funktion der std Lib nicht so funktioniert wie du dir das vielleicht vorstellst, liegt ganz einfach daran, dass sie aus einem einfachen Algorithmus mit Initialisierungswert besteht. Mit dem selben Initialisierungswert bekommst du also auch die selbe Sequenz an Zufallswerten, was manchmal sogar recht nützlich sein kann. Im Netz findest du aber auch Artikel wie du dir eine eigene Random Funktion baust, die bessere und zufälligere Ergebnisse liefert. Wie Wolle. aber schon sagte, "echten" Zufall wirst du am Computer wohl nicht hinbekommen.



  • Was ist denn echter Zufall? Wenn ne statistisch gleichmäßige Verteilung als Bedingung genügt, ist die Boost Random Number Library ganz nützlich, denk ich.



  • groovemaster2002 schrieb:

    Das die rand Funktion der std Lib nicht so funktioniert wie du dir das vielleicht vorstellst, liegt ganz einfach daran, dass sie aus einem einfachen Algorithmus mit Initialisierungswert besteht. Mit dem selben Initialisierungswert bekommst du also auch die selbe Sequenz an Zufallswerten, was manchmal sogar recht nützlich sein kann. Im Netz findest du aber auch Artikel wie du dir eine eigene Random Funktion baust, die bessere und zufälligere Ergebnisse liefert. Wie Wolle. aber schon sagte, "echten" Zufall wirst du am Computer wohl nicht hinbekommen.

    Es gibt Plattformen die einen extra Baustein haben der die Zufallszahlen generiert, dort wird die Zahl anhand von irgendwelchen Wellen ermittelt.
    Wie das aber genau funktioniert kann ich leider nicht sagen, hat mir nen Physik-Student erzählt und da hab ich nur Bahnhof verstanden 🤡



  • @SirLant: Die machen das afaik irgendwie über thermische Schwankungen.



  • @SirLant: Die machen das afaik irgendwie über thermische Schwankungen.

    Wird das denn nicht davon beeinflusst dadurch, ob mein Rechner nun in der Nähe eines Heizkörper steht oder nicht.

    Und so wirklich zufällig ist in der Physik eigentlich nichts.



  • Wird das denn nicht davon beeinflusst dadurch, ob mein Rechner nun in der Nähe eines Heizkörper steht oder nicht.

    wird es ja .. aber dass ändert ja nichts ander tatsache

    Und so wirklich zufällig ist in der Physik eigentlich nichts.

    naja vielleicht gibt es "keine" zufälle . dass ändert aber ncihts daran das es schwankungen gibt die nicht immer gleich sind. also unterscheiden sich die schwankungen in dem wert in dem sie dich vom "normalen2 wert unterscheiden
    und ich denke daraus kann man zaheln geneieren die nicht vorherzusehend sind ..



  • Irgendwer schrieb:

    Und so wirklich zufällig ist in der Physik eigentlich nichts.

    <OT>Naja, das ist noch nicht raus - obwohl die Quantenforscher wieder einen Schritt auf Einstein zugegangen sind. 😉 </OT>



  • wird es ja .. aber dass ändert ja nichts ander tatsache

    Was ich meinte war, dass wenn mein Rechner nun beim Heizkörper die "Zufallszahen" eher in einem Bereich liegen als wenn er weiter davon weg ist. Somit sind die Chancen nicht mehr gleich verteilt und es ist keine Zufallszahl.

    dass ändert aber ncihts daran das es schwankungen gibt die nicht immer gleich sind.

    Hänge die Wahrscheinlichkeit dass eine bestimmte Schwankung kommt denn nicht mit der Temperatur und somit mit dem Ort an dem mein Rechner steht zusammen?



  • naja ich denke sie wird davon beeinlusst , hängt aber auch noch von anderen dingen ab ...

    qheizkörper
    klar ändert sich dann der bereich der zufallszahlen
    aber dennoch auch durch andere faktoren



  • truebool schrieb:

    klar ändert sich dann der bereich der zufallszahlen

    Nö, es werden doch die Temperatur-Schwankungen gemessen.

    Und ob die jetzt zwischen 2,0 und 2,3 oder 60,0 und 60,3 schwankt ist wurscht. Die 0,3 Differenz zählen.

    MfG Jester



  • jepp ist kar hast recht
    habe heute ein talent zum nicht zuende denken ...
    mhh sollte das posten für heute lassen


Anmelden zum Antworten