Eine Random generierte Zahl von 1-999 erstellen?
Hallo,
ich würde gerne Mathematisch eine Zahl von 1-999 "generieren". Hat jemand eine Idee, bzw eine Art einer Formel?
Es gibt in PHP eine Funktion, die Random 1-999 generiert, allerdings soll diese angeblich ausrechenbar sein, weshalb ich eine Sicherere Methode suche.
Dafür hatte ich zuerst z.B. diese überlegt Eine Zahl von 1-999+1-999+1-999/3
Sprich z.B. 100+100+100/3. Allerdings ist die warscheinlichkeit viel geringer die 1 oder die 999 zu bekommen, als eine Zahl im Bereich 300-700, da diese Zahlen ja über mehrere wege erreichbar sind. Die 1 aber z.B. kann nur durch 1+1+1/3 erreicht werden, was aber sehr unwarscheinlich ist, das 3x die 1 generiert wird.
Das die 500 z.B. dann errechnet wird, wäre viel höher.
Aus diesem Grund suche ich einen weg eine Zahl von 1-999 zu bekommen. Hat jemand eine Idee wie?
Ich kann wie gesagt "Random" zahlen generieren, die könnten dann auf irgendwelche weisen "mal" oder "geteilt" genommen werden oder addiert oder sonst was. Wichtig ist nur, das immer nur eine Zahl zwischen 1-999 rauskommt und die Chancen für 1, 999 oder die 500 möglichst gleich ist.
Jemand eine Idee?
5 Antworten
Jede generierte Zufallszahl ist ausrechenbar. Denn sie wurde ja ganz offensichtlich ausgerechnet! Wenn man den selben Seed (Startwert) nimmt, dann kriegt man immer die selbe Folge von Zufallszahlen.
Um "echte" Zufallszahlen zu erzeugen muss man nichtdeterministische Elemente einbringen. Z.B. radioaktiven Zerfall oder Diodenrauschen messen. Hilfsweise Festplattentiming, Netzwerkaktivität usw. mit reinrechnen. So macht es z.B. der eingebaute Zufallszahlengenerator in Linux. Ob PHP auf diesen zurückgreift weiß ich nicht - "berechenbar" wäre es dann jedenfalls kaum mehr.
Ganz allgemein: Die rand-Funktion in vielen Programmiersprachen hat einen Startwert. Wenn man den weiß, dann kann man deine Zufallszahl nachrechnen. Das ist aber auch relativ aufwändig. Wenn das OK ist, dann kannst du die rand-Funktion nutzen.
Wenn du selber mit den Pseudozufallszahlen, die rand ausspuckt rumrechnest, dann ist das in jedem Fall genauso nachvollziehbar und zudem könnte es dann passieren, dass deine Zufallszahlen nicht mehr gleichverteilt sind.
Wenn du echte Zufallszahlen brauchst, dann solltest du irgendeine API wie zum Beispiel random.org nehmen. Auf die Schnelle hab ich die Seite hier gefunden, die du vielleicht in PHP nutzen könntest
https://github.com/pixeloution/true-random
random.org bezieht seine Zufallszahlen glaub ich aus irgendeinem kosmischen Rauschen. Die Zufallszahlen so zu erzeugen, ist aber langsamer als über die rand-Funktion. Du müsstest selbst entscheiden, ob echter Zufall so wichtig für deine Anwendung ist, was willst du mit den Zufallszahlen denn machen?
Für echte Zufallszahlen kann es keine Formel geben, echte Zufallszahlen brauchen Chaos. :)
Wird wohl nicht viel helfen aber. Hol dir MATLAB oder einen kostenlosen numerischen Rechner. Und tippe folgendes ein. Das mit der Wahrscheinlichkeit ist aber auch interessant.
"rand" erzeugt eine zufällige Zahl zwischen 0 und 1.
Befehl: a = 1 + rand*998;
Vielleicht ist in deiner Software auch ein ähnlicher Befehl enthalten?
Das heißt es könnte
1+1*998 raus kommen oder 1+0*998?
Sicher das dann auch die 1 mal gezogen werden kann?
addiere doch einfach was geheimes dazu. dann ist egal ob die methode ausrechenbar ist
Pseudozufallsgeneratoren sind immer berechenbar, da sie deterministisch sind. Allerdings gibt es kryptographisch ziemlich sichere Pseudozufallsgeneratoren, Google mal genau danach