Numerical Recipes in C sagt nicht, die eingebauten Zufallszahlengeneratoren zu vertrauen, wenn es darauf ankommt. Sie könnten wahrscheinlich den Algorithmus in dem Buch als Funktion RAN1() gezeigt implementieren, die es alle bekannten statistischen Tests der Zufälligkeit behauptet geht (1992) für weniger als etwa 10 Anrufe.
Die Grundidee hinter dem RAN1 (Algorithmus) ist ein Shuffle mit dem Ausgang des Zufallszahlengenerators hinzufügen niederwertigen serielle Korrelationen zu reduzieren. Sie verwenden den Bays-Durham Shuffle aus Abschnitt 3.2-3.3 in The Art of Computer Programming Volume 2, aber ich schätze, Sie könnten auch den Fisher-Yates shuffle verwenden.
Wenn Sie mehr zufällige Werte als die benötigen, bietet das gleiche Dokument auch einen Generator (RAN2), die für mindestens 10 Werte sollte gut sein (meine Vermutung auf einem Zeitraum von 2,3 x 10-basiert) . Sie stellen auch eine Funktion (ran3) zur Verfügung, die eine andere Methode zur Erzeugung von Zufallszahlen verwendet, sollten lineare Kongruenzgeneratoren Ihnen ein Problem bereiten.
Sie können jede dieser Funktionen mit Ihrem < 0.5-Test verwenden, um sicherer zu sein, dass Sie eine gleichmäßige Verteilung erhalten.
Welche Sprache? Und warum eine Saite zurückgeben? –
"besser" in welcher Weise? Unter der Annahme, dass random() einen Float generiert, der 0 <= Num <1 ist, haben Sie eine genaue 50-50 Chance. –
Wie wäre es mit einer "Randmünze"? ;) – DisgruntledGoat