eindeutige Zufallszahl

  • Hallo Zusammen,

    Ich benötige eine Anzahl n 9-stelliger Zufallszahlen, die eindeutig sein müssen.
    Der Codeaufruf mit

    Code
    $value=Random(1000000, 9999999, 1)

    erzeugt zwar eine 9-stellige Zufallszahl,
    die aber keineswegs eindeutig ist, sondern sich regelmässig wiederholt.
    Anscheinend benutzt AutoIT in der Funktion "Random" einen deterministischen Zufallszahlengenerator

    Ideen? Anregungen? Tipps?

    Grüsse, Duckbone

    Einmal editiert, zuletzt von Duckbone (23. Juni 2008 um 19:05)

  • Vielleicht Glück?
    Ich weiß, das müsste mega Glück sein, aber bei mri wiederholt sich die Zahl keineswegs.

    Auszug aus der Hilfe:

    Zitat

    The Mersenne Twister is an algorithm for generating random numbers. It was designed with consideration of the flaws in various other generators. The period, 219937-1, and the order of equidistribution, 623 dimensions, are far greater. The generator is also fast; it avoids multiplication and division, and it benefits from caches and pipelines. For more information see the inventors' web page at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html

    Ich bin mir aber ziemlich sicher, dass das kein deterministischen Zufallszahlengenerator ist.

  • Schmeiss doch alle Zahlen die sich noch nicht wiederholt haben in ein Array
    und vergleiche dann jede neue Zahl in einer Schleife mit den schon eingetragenen.

  • anno2008:

    bei einer Anzahl Zufallsszahlen von n=1000000 sind immerhin schon 608 Zufallszahlen doppelt vorhanden.

    Gruss,

    Duckbone


    Code
    $i=1 
    For $i = 1 to 1000000 
    $value= Random(100000000, 999999999, 1) 
    FileWrite("C:\Programme\AutoIt3\myScripts\random1.txt", $value & @CR) 
    Next
  • Bei einer Anzahl von Möglickeiten, die kleiner ist als 9999999 ist es doch gar nicht so unwahrscheinlich, dass bei 1000000 Durchläufen doppelte Zahlen auftreten.
    Es ist sogar wahrscheinlich, dass ncoh viel mehr doppelte Zahlen auftreten.

  • Nimm ganz einfach das Datum,die Jahreszahl,die Uhrzeit ind stunden,minuten & sekunden,und verwandle das in einen String !
    Die Zahl wird es nur ein einziges mal geben !

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Hi Oscar,

    deine UDF hilft mir auf jeden Fall weiter. Ich wollte die eindeutige Zufallszahl jedoch als Variable zur Laufzeit zur Verfügung haben.

    So müsste ich mit einer Datei, bzw. mit einem Array arbeiten; aber zur Not würde das gehen.

    Vielen Dank für deine Hilfe.


    Gruß, Duckbone

  • Hallo Oscar,

    vielen Dank, so funktioniert es nun perfekt; dank deiner Hilfe:

    [autoit]

    #include <RanNumGen.au3>
    Global $Timer = TimerInit()
    Global $zahlen = _RanNumGen(10, 100000000, 999999999, True)
    $i=1
    For $i = 1 to 10
    $zahl = $zahlen[$i-1]
    MsgBox(0,'',$zahl)
    Next

    [/autoit]

    Gruss, Duckbone