C++ Random Number

Anonymous999

Cadet 4th Year
Registriert
Aug. 2008
Beiträge
81
hi alle zusammen
hab ne frage ich soll ein Blackjack Spiel programmieren und weis nicht wie die funktion für zufallszahlen aussieht.
danke schon mal im Vorraus
Mfg Anonymuos
 
Hi,
wieso nicht einfach

randomize();
Variable = random(irgendeine Zahl);

?

Bin kompletter Anfänger, aber wozu brauche ich dann so eine Library?

Gruß
Slowpoke
 
1. fragte Anonymous nach C++ (siehe Thread-Präfix), und Boos ist C++ wie es besser nicht geht
2. hätte Anonymous selbst auf die Idee kommen sollen zuerst im Forum zu suchen (wird alle paar Wochen gefragt)
3. gibt es in der C Standardbibliothek die Funktionen srand() und rand(). Das sind auch wunderbare Stichwörter für unsere Suche
 
http://openbook.galileocomputing.de/javascript_ajax/06_zufall_001.htm#Xxx999407
Es ist mathematisch nachgewiesen, dass dieser Algorithmus die (mathematischen) Bedingungen für einen Zufallsgenerator erfüllt; die entstehende Zahlenfolge ist tatsächlich zufällig.
Code:
unsigned int HPRandom( unsigned int Max )
{
  static double seed = (double)rand() / RAND_MAX;
  const double PI = 4 * atan( 1. );

  seed += PI;
  seed = pow( seed, 8 );

  unsigned int rnd = (unsigned int)seed;
  seed = seed - (int)seed;

  return rnd % Max;
}
einfach implementiert und angewandt. gibt eine zahl zwischen 0 und max - 1 zurück.
 
un wie ändere ich die funktion um damit sie einen größeren Zahlenbereich ausgibt?
 
die entstehende Zahlenfolge ist tatsächlich zufällig.
OMG. Das Manuskript hätt ich dem Autor beim Korrekturlesen sowas von um die Ohren gehauen und bestimmt nicht veröffentlicht. :<

Abgesehen davon dass es offensichtlich nur ein PRNG ist, ist er auch auf keinen fall besser als rand() selbst, weil er ja auf dessen
Grundlage implementiert ist.
 
@asdfman:
Natürlich ist es nur ein PRNG und wie Behauptung zufällig ist wohl etwas populistisch. Immerhin steht (mathematisch) dabei. Ich würde jetzt mal daran zweifeln, ob es auch für einen CSPRNG reicht.

Was meinst du mit auf der Grundlange von rand() implementiert? (ich hoffe, du meinst nicht die Initialisierung des Seeds) Natürlich ist das grundlegende Schema mit Vorkommastellen als Zufallszahl und Nachkommastellen als neuer Seed bei vielen rand() Implementierungen genauso - allerdings wird hier Pi bei jedem Schritt eingeflochten, was ich eine sehr hübsche Idee finde. Zumindest in der Theorie, wenn wir Pi als unendliche Folge von Zahlen ohne jegliches Muster betrachten, würde die Idee wohl aufgehen.

Viel interessanter würde ich allerdings finden, wie es mit der Gleichverteilung dieses Generators aussieht. Hätte mal Lust, das zu testen.
 
Naju, die ganze Reihe von Zufallszahlen, die der ausspuckt, hängt von einem einzigen Aufruf von rand() ab.
Wenn man rand() voraussagen kann, kann man auch jede Zahl die die Funktion oben ausspuckt vorhersagen.

Zum RNG testen nimmst du dieharder.
 
Die Initialisierung des Seeds würde ich mal als Stilblüte abtun und das lässt sich ja auch problemlos ändern. Außerdem erhebst du ja damit automatisch Anspruch darauf, dass es ein CSPRNG ist. Das hängt natürlich stark vom Verwendungszweck ab.

Und wenn, dann ist der Startvektor das grundsätzliche Problem jedes PRNG, das ist nun nicht unbedingt rand() zuzuschreiben. Bei Schneier on Security hab ich vor einiger Zeit mal einen ziemlich geilen Generator gesehen, der dermaßen viele Datenquellen zur Generierung von Daten mit hoher Entropie benutzt, dass es kaum noch möglich ist, alle Quellen aufzuzeichen und nachzuvollziehen.
 
indem du unsigned int durch unsigned long long umschreibst. die meisten compiler vertragen anstatt long long auch __int64. wenn du __int64 schöner findest, aber der compiler dies nicht versteht, dann setz bevor dem ersten __int64 aufruf ein typedef long long __int64;.

@ asdfman:
weshalb "regst" du dich jetzt über diesen algorithmus auf? weißt du ob der author eine eigene ssl implementierung schreiben will? wenn nicht, ist es doch sowas von egal, ob die zahl nun vorhersagbar ist oder nicht. hauptsache sie ist zufällig und das war sie bei mir bisher immer.
 
Immer mit der Ruhe. Ich wollte nur (deutlich) darauf hinweisen, dass die Behauptung,
die Zahlen seien zufällig, falsch ist. Was den Algorithmus angeht, ist wohl die Wahl des
Seeds sehr ungünstig, weil der eine Zufallsgenerator dann von einem anderen abhängt,
und deshalb keine besseren Werte liefert. Ansonsten mag der Algorithmus gut sein, das
kann ich nicht bewerten. N4C3Rmann kann ja mal erzählen, was dieharder so dazu sagt.
 
Zurück
Oben