NextDouble returns "n. def."



  • Hi,
    ich habe ein Problem mit der Methode Random.NextDouble():

    Nach dem klicken eines Buttons wird eine neue Instanz der Klasse Random erstellt.

    Random rnd = new Random();
    double Zufallszahl;
    

    Dann beginnen einige schleifen in denen ich immer wieder eine Zufallszahl für diverse Berechnungen benötige. Die Zufallszahl erzeuge ich durch

    Zufallszahl = rnd.NextDouble();
    

    Im Rahmen der Schliefen wird NextDouble schon gut 10.000 mal oder mehr aufgerufen.
    Irgendwann ist dann

    Zufallszahl.ToString() == "n. def.";
    

    Das wundert mich ein bisschen.

    Sind irgendwann alle Zufallszahlen "aufgebraucht" und man muss neue Zufallszahlen mit einem neuen Seed erstellen? Wenn ja, wie lässt sich denn möglichst schnell ermitteln, dass neue Zufallszahlen benötigt werden. Da viele Tausend Rechnungen angestellt werden müssen, spielt die Geschwindigkeit, mit der jede Schliefe durchlaufen wird, eine wichtige Rolle.

    Man dankt!



  • Kannst du keinen Bereich angeben in welchem sich deine Zufallszahlen aufhalten sollen? Eventuell könnte das das Problem lösen.



  • Hallo, also so wie ich das sehe hast du irgendwo einen Fehler drinnen.. mit System.Random hat das ganze nichts zu tun:

    System.Random rnd = new System.Random();
                double[] randoms = new double[10];
                for (int i = 0; i < 10; i++)
                    randoms[i] = rnd.NextDouble();
    

    Funktioniert bei mir problemlos. Ergebniss sind 10 verschiedene Doubles im Bereich zwischen 0.0 und 1.0.



  • Danke für die Antworten aber so einfach scheint es nicht sein. Die ersten paar (tausend, vielleicht sind es auch Millionen, Milliarden oder mehr) Aufrufe von NextDouble funktionieren ja so wie sie sollen. Irgendwann wird dann aber "n. def." zurückgegeben.
    Daher meine Frage, ob der Vorrat an zufälligen Zahlen erschöpfen kann. Wenn ja, wäre es interssant, wie viele zufällige Zahlen aus einem Seed erzeugt werden können.



  • uhhh achso..

    Da müsste man sich man anschauen wie System.Random implementiert ist. Eventuell ist der "Vorrat" einfach mal aufgebraucht. Kannst du nicht in jeder Schleife ein System.Random Objekt instanziieren?

    Ansonsten kannst du ja mal
    http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx
    probieren...


  • Administrator

    Doreios schrieb:

    Daher meine Frage, ob der Vorrat an zufälligen Zahlen erschöpfen kann. Wenn ja, wäre es interssant, wie viele zufällige Zahlen aus einem Seed erzeugt werden können.

    Erschöpfen? Vorrat? lol!
    Vereinfacht gesagt, ist es eine Funktion, welche ständig eine neue Zahl aus der vorhergehenden erzeugt und es wird halt dort angefangen, wo der Seed gesetzt wurde. Da gibt es kein erreichen einer Grenze, so dass die Menge der Zufallszahlen ausgeht. Es gibt nicht irgendwelche Vorräte. Es wird immer wieder von neuem eine Zahl erzeugt. Gewisse Systeme verteilen die Zahlen besser, andere anders, andere schlechter.

    Zeig mal einen kurzen Code, welcher dein Problem reproduziert. Ich bin überzeugt davon, dass es an etwas anderem liegt.

    Grüssli



  • Vielen Dank für die Antworten.

    Dravere hatte recht. Das Problem war, dass ich in manchen Fällen von der Zufallszahl eine nicht definierte Zahl abgezogen hatte. Folglich war das Ergebnis ebenfalls nicht definiert.


Anmelden zum Antworten