Ich habe nur über die Funktion php rand()
nachgedacht und darüber nachgedacht, wie ich sie neu erstellen könnte, und bin gekommen völlig verblüfft.
Wie funktionieren Zufallszahlengeneratoren?
Kommentare
- Pseudozufallszahlengeneratoren verwenden einen Startwert, a Tabelle vordefinierter Konstanten und mathematischer Formeln. Echte Zufallszahlengeneratoren verwenden normalerweise atmosphärisches Rauschen. Sie können leicht Zufallszahlen aus dem Lesen von / dev / random erhalten.
- Ist das atmosphärische Rauschen garantiert zufällig?
- random.org hat eine ziemlich gute Diskussion über Zufallszahlen und wie sie ‚ generiert werden .
-
function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
- Jemand muss dies tun: xkcd.com/221 😉
Antwort
Zufallszahlengeneratoren (RNGs) erzeugen wirklich Pseudozufallszahlen, da es unmöglich ist, tatsächlich eine WIRKLICHE Zufallszahl zu erzeugen. Die einzigen wirklich wirklich zufälligen Dinge sind Handlungen von Gott, wie ein Blitz.
Dieser Wikipedia-Artikel kann Ihnen möglicherweise bei der Erklärung helfen: http://en.wikipedia.org/wiki/Random_number_generators
Soweit ich weiß, gibt es im Grunde zwei Teile eines RNG: den Samen und dann die Zufallszahl, die aus diesem Samen ausgewählt wurde. Wenn Sie den RNG säen, geben Sie es ist ein Äquivalent zu einem Start-Po int. Dieser Startpunkt enthält dann eine Reihe von Zahlen, die „innerhalb“ des Programms liegen. In PHP können Sie srand () verwenden, um die Seeds zu „mischen“, sodass Sie fast immer eine andere Antwort erhalten. Sie können dann rand (min, max) verwenden, um in den Startwert zu gelangen und eine Zahl zwischen min und max einschließlich zu wählen.
WARNUNG, MÖGLICHE KÄSEANALOGIE VORAUS!
Stellen Sie sich jeden „Samen“ als eine Eiskiste vor und dann die Zufallszahlen als Eiswürfel. Nehmen wir an, Sie haben 1000 Eiskisten und jede Truhe enthält 1000 Eiswürfel. Auf dem Jahrmarkt wählen sie eine Eiskiste aus, die sie für Getränke verwenden möchten, und sie können nur einen Eiswürfel verwenden. Sie benötigen jedoch nur Eiswürfel, die größer als 1 Kubikzoll sind. Also wählen sie zufällig eine Truhe zwischen diesen 1000 Truhen aus und dann wählen sie zufällig einen Eiswürfel in dieser Truhe. Wenn es für die gewünschte Größe funktioniert, verwenden sie es. Wenn dies nicht der Fall ist, legen sie es zusammen mit den anderen wieder in die Brust. Wenn sie es ein bisschen lustiger machen möchten, wechseln sie die Truhe im Voraus, um völlig zu vergessen, wenn Sie so wollen!
Wie PHP wählt tatsächlich physisch den Samen und die Zufallszahl, ich habe nicht genug Wissen dafür (worüber Sie sich wahrscheinlich am meisten gewundert haben!). Ich würde nicht versuchen, die Funktion rand () zu wiederholen. Für die meisten webbasierten Anwendungen, die Sie erstellen, sollte rand () für jede Zufallszahl ausreichen, die Sie benötigen.
Überprüfen Sie auch die lineare Kongruenz Generatoren, dies könnte mehr von dem sein, wonach Sie suchen, wenn Sie die schmutzigen Details wollen: http://en.wikipedia.org/wiki/Linear_congruential_generator
Hoffe, das hilft!
Kommentare
- Wie würden Handlungen von
god
zufällig sein? im geringsten? Darüber hinaus ist der Blitz nicht ‚ nicht zufällig, sondern folgt einem Pfad, der durch verschiedene Bedingungen bestimmt wird. Außerdem ist der Dolmetscher, der die Zahl generiert, im Wesentlichen irrelevant. - Ich ‚ verwende höhere Handlungen im rechtlichen Sinne: de.wikipedia.org/wiki/Act_of_God Sie werden als zufällig angesehen, da sie außerhalb der offensichtlichen menschlichen Kontrolle liegen.
- Im Wesentlichen gibt es also nichts Zufälliges. Aber das würde erfordern, dass jedes scheinbar zufällige Vorkommen beeinflusst wird, was ‚ nicht funktioniert, wenn Sie am Anfang der Zeit angelangt sind … Sieht aus wie ich ‚ Ich werde einige Philosophieklassen belegen = D
- @Korvin Soweit wir wissen, sind Quantenphänomene wie der radioaktive Zerfall oder die Emission eines Photons durch ein angeregtes Atom wirklich zufällig . Mathematiker und Philosophen argumentieren jedoch, was es bedeutet, wirklich zufällig zu sein. Und während gewöhnliche Leute einen Münzwurf für ziemlich zufällig halten, können agile Bühnenmagier ( news.stanford.edu/pr/2004/diaconis-69.html ) dies regelmäßig tun Erhalte 10 Köpfe auf 10 Flips.
- @Charles – Ein Münzwurf ist ‚ nicht einmal ein binärer Kopf / Schwanz, sondern ‚ ist eigentlich Kopf / Zahl / Kante, also könnte ein wirklich guter Bühnenmagier dafür sorgen, dass es weder Kopf noch Zahl herunterkommt. * 8 ‚)
Antwort
Sie sind normalerweise nicht wirklich zufällig, werden aber als pseudozufällig bezeichnet, da sie eine Zahlenfolge erzeugen, die zufällig erscheint. Dies geschieht mit einigen interessanten mathematischen Formeln. Eine der häufigsten ist die Linear Congruential Generator .
Pseudozufallszahlen haben eine nützliche Eigenschaft, die echte Zufallszahlen nicht haben: Wenn Sie beim Start denselben Startwert verwenden, erhalten Sie eine identische Sequenz zurück. Dies kann zum Testen sehr praktisch sein.
Kommentare
- Wenn ich ‚ Ihre zweite Aussage richtig verstehe:
random(5332)
ist immer gleichrandom(5332)
? - @Korvin, nein, ich meine, wenn Sie
srand(5332)
dann ist die nächste vonrand
zurückgegebene Nummer immer dieselbe. - “ erscheint zufällig “ – > haben dieselben statistischen Eigenschaften wie echte Zufallszahlen.
- +1 für den LGC-Wikipedia-Link hat dies einen ausgezeichneten Animation , warum einfache PRNGs bei mehrdimensionalen Monte-Carlo-Simulationen schwerwiegende Einschränkungen aufweisen.
Antwort
Sind y Fragen Sie nach Pseudozufall oder Zufall? Andere antworteten über Pseudozufall, lassen Sie mich über Random sprechen.
Es gab (gibt?) Tatsächliche hardwarebasierte Zufallszahlengeneratoren im Verkauf. Sie basierten auf einem Chip mit einem kleinen Funkgerät, das weißes Rauschen der Weltraumstrahlung misst, oder einer kleinen radioaktiven Probe und Messperioden zwischen ihrem Zerfall. Das Problem bei ihnen war die Bandbreite – die Menge an Entropie, die sie erzeugen konnten, war nicht sehr hoch, so dass sie für Keime von Pseudozufallsalgorithmen verwendet wurden. Sie wurden in Bankensystemen, Hochsicherheit und dergleichen verwendet.
OTOH, wenn Sie einen Entwickler von eingebetteten Systemen treffen, werden diese darüber lachen. Für gängige Zwecke bei der Programmierung eines Mikrocontrollers führt das Lesen von niedrigen 4 Bits eines 16-Bit-Analog-Digital-Wandlers mit einem schwebenden (nicht verbundenen) Pin zu einem einwandfreien Ergebnis Zufälliges Rauschen bei mehr als ausreichender Bandbreite (je kürzer die Abfrageperiode, desto „verrauscht“ das Auslesen) und einfacher als das Schreiben einer tatsächlichen RNG-Routine. Und wenn man bedenkt, dass ADCs häufig in Silizium von Mikrocontrollern implementiert sind, häufig implementiert und häufig mit implementiert werden 8 Kanäle, von denen Sie vielleicht 5 für Ihre Anwendung benötigen, es ist praktisch kostenlos.
Und selbst wenn Sie keinen ADC haben, werden einige Elemente, die an einen digitalen GPIO-Pin angeschlossen sind, ein ziemlich gutes Ergebnis erzielen Rauschen. In eingebettet ist Rauschen ev er-präsent (und ständig gekämpft), und so ist es sehr einfach, eine echte Zufälligkeit zu erhalten.
Antwort
Es gibt viele Möglichkeiten um zu versuchen, eine „zufällige“ Folge von Zahlen zu emulieren. Ihre erste Station sollte sein, sicher über lineare Kongruenzgeneratoren zu lesen. So funktionieren die meisten grundlegenden Zufallszahlengeneratoren, und ich wette, es funktioniert so wie die rand () -Funktion von PHP.
Die interessantere nächste Frage zum Nachdenken ist, wie sie sich selbst aussetzt ? IP-Adresse? Usw.
Kommentare
- Der Keim verwirrt mich, ich kann ‚ Denken Sie an nichts, was die Funktion möglicherweise ohne ein Muster auslösen könnte, und selbst wenn nicht, was bewirkt dann, dass der zufällige Start überhaupt generiert wird!
- Ich glaube, ein Zeitstempel ist häufig wird als anfänglicher Startwert verwendet, wenn tatsächlich keiner aus einer anderen Quelle bereitgestellt wird. Im alten BASIC war
RANDOMIZE TIMER
eine gebräuchliche Redewendung und “ gut genug “ für die meisten (nicht kryptografischen) Zwecke. Laut man 3 srand verwendet die GNU C-Bibliothek a fester Startwert von 1, bis das PRNG erneut ausgesät wird.
Antwort
Zunächst praktisch alle rand()
-Funktionen liefern keine echte Zufälligkeit, sondern sogenannte Pseudozufallszahlen.
Wie funktionieren Pseudozufallszahlengeneratoren? Grundsätzlich funktioniert die Verschlüsselung genauso: Sie haben eine Funktion (einen Hash), die eine Eingabe akzeptiert und eine Ausgabe auf so komplexe Weise erzeugt, dass es unmöglich ist, die Eingabe anhand der Ausgabe zu erraten oder umgekehrt. Jede Chiffre kann verwendet werden, um einen ziemlich guten Pseudozufallsgenerator zu erstellen. Obwohl Sie im Prinzip jeden Pseudozufallsgenerator für die Verschlüsselung verwenden können, sind die meisten Pseudozufallszahlengeneratoren in erster Linie auf Geschwindigkeit und nicht auf kryptografische Sicherheit ausgelegt wird Hackern keine Kopfschmerzen bereiten.
Bei einem Pseudozufallsgenerator wird die Hashing-Funktion auf einen verborgenen internen Zustand des Generators angewendet, und seine Ausgabe wird verwendet, um a) diesen internen Zustand zu ändern, und b) um die Ausgabe der Funktion rand()
zu berechnen. Der nächste Aufruf von rand()
verwendet diesen geänderten internen Status und führt somit zu einem anderen Ergebnis. Je besser die Hash-Funktion ist, desto weniger leicht sind die Ergebnisse von echten Zufallszahlen zu unterscheiden.
Tatsächlich haben Computer heutzutage Zugriff auf echte Zufallszahlen: Sie entstehen durch Jitter beim Timing von Interrupts, die von externen Geräten erzeugt werden. Linux verwendet diese Werte geringer Unsicherheit, um ständig einen „Entropiepool“ zu rühren, der nur wenige Kilobyte internen Zustands umfasst. Auf diesem Entropiepool basierende kryptografische Hashes werden über die Geräte /dev/random
und /dev/urandom
verfügbar gemacht. Der Zugriff auf einige wirklich sehr gute Zufallszahlen ist also so einfach wie das Öffnen eines dieser beiden Geräte und das Lesen einiger Bytes von ihnen.
Antwort
Zufallszahlen sind Zahlen, die vom Prozess generiert werden und deren Ausgabe nicht vorhersehbar ist. Das heißt, wir können nicht sagen, was als nächstes ausgegeben wird. Wir können ein einfaches Beispielergebnis der Würfel nehmen. Was ausgegeben wird, wenn wir einen Würfel werfen, ist unvorhersehbar.
Es gibt zwei Arten von Zufallszahlen: 1. Wahre Zufallszahlen 2. Pseudozufallszahlen.
Wie Zufallszahlen erzeugt werden
Kommentare
- Bitte verwenden Sie die Anführungszeichenformatierung, um hervorzuheben, welche Teile der Die Antwort liegt bei Ihnen und stammt aus der Quelle, die Sie zitieren. Wenn Ihre Antwort nur das Kopieren / Einfügen aus einer externen Quelle ist, ist ‚ hier keine gute Antwort.
- Dies ist nicht ‚ scheint nichts Wesentliches über Punkte zu bieten, die in den vorherigen 6 Antworten gemacht und erklärt wurden