Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

08.07.2007, 22:05

rand() ist nicht zufällig

Hi

Mal ne Frage:
Ist schon mal jemandem aufgefallen das die Kommeten
bei diesem letzten spiel immer gleich runterfallen
(wenn man das spiel startet fallen sie genau wie letztes mal )

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

08.07.2007, 22:36

*plong* :roll:

Es gibt ein System das ich kenne was dir wirkliche Zufallszahlen generieren kann und das ist ein Quantencomputer. (nein auch rauschen ist nicht total zufällig) und ich glaube das du leider keinen zuhause stehen hast....

Hinter dem rand Ding steckt ein Algorithmus, der immer gleich arbeitet, quasi bekommst du bei jedem durchlauf die gleichen werte, kannste ja mal testen in dem du die randwerte in ein Array Packst und ausgibst... es gibt eine total einfache Lösung, nimm einfach ein rand von der Zeit, die bekommst du durch GetTime... irgendwas... siehe Google/MSDN.

Davon nimmst du die Restklassenmenge aus welchem Bereich du die Zufallszahl möchtest, z.B. würde das:

C-/C++-Quelltext

1
  rand(GetSystemTime()) % 10


eine Zahl zwischen 0 und 9 generieren. GetSystemTime() ist dabei ausgedacht...

Hier ist der MSDN Eintrag dazu

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

09.07.2007, 08:26

Zitat von »"koschka"«


C-/C++-Quelltext

1
  rand(GetSystemTime()) % 10

Seit wann macht man das denn? Angenommen ich will eine Zahl zwischen 0 und 999 haben, dann würde ich doch nur in einem von 1000 Fällen überhaupt erst die Chance haben, die 999 zu ziehen. Das kann es nicht sein! Man möchte doch im Allgemeinen, dass jede Zahl dieselbe Wahrscheinlichkeit hat. Mit deinem Vorschlag haben höhere Zahlen geringere Wahrscheinlichkeiten.

Normalerweise macht man einfach nur das hier einmal ganz am Anfang:

C-/C++-Quelltext

1
srand(GetSystemTime());

Damit hat man praktisch jedes Mal eine andere Sequenz der Zufallszahlen.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

09.07.2007, 09:39

Jep, David hat recht... aber das gilt ja vorallem für recht große Bereiche, vorallem bedingt das rand ja nur maximal RAND_MAX (32767) also Zahlen kleiner als das ausgibt, wenn ich Dich richtig verstanden hab ist es doch bei mod 10 total wurscht, da der eh so klein ist.

Der Ansatz mit dem Weiten einstellen (siehe Example) ist natürlich besser.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

09.07.2007, 11:48

Zufallszahlen per rand() und Modulo Operator zu erzeugen ist ohnehin egtl falsch. Nicht umsonst gibt es eine Konstante mit namen RAND_MAX die zu hilfge gezogen werden sollte.

Sehr interessanter Link zum Thema: http://www.azillionmonkeys.com/qed/random.html
@D13_Dreinig

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

6

09.07.2007, 12:06

ok weiß eine möglichkeit...
danke

Beliah

Treue Seele

Beiträge: 115

Wohnort: Söhlde - LK Hildesheim

Beruf: FI-Anwendungsentwicklung

  • Private Nachricht senden

7

10.07.2007, 17:48

Zitat von »"David_pb"«


[...]
Sehr interessanter Link zum Thema: http://www.azillionmonkeys.com/qed/random.html


Und noch einer
Debuggers don't remove bugs, they only show them in slow motion.

Google Suche ohne Werbung und Cookies: Scroogle

Derzeitige(s) Freizeitprojekt(e)

Werbeanzeige