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

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

11

14.05.2010, 13:53


Wenn die Zufallszahlen später mal für andere Zwecke wie Verschlüsselung oder Ähnliches verwendet werden sollen, bietet es sich an gleich von Anfang solche Funktionen zu verwenden. Und was einmal programmiert wurde, kann man ja weiter verwenden.(in dem fall )

Mersenne-Twister für Crypto öhm nö:

Zitat von »Wikipedia«


Im Gegensatz zu anderen Algorithmen ist der Mersenne-Twister in seiner Reinform nicht für kryptographische Anwendungen geeignet.

Ich denke auch, dass rand() wahrscheinlich für seine Zwecke ausreichend ist. Ansonsten ist es auch geschickter ne fertige Bibliothek zu verwenden als so was selber zu machen (insbesondere wenn es in den Bereich der Cryptographie geht).

R3D L10N

Treue Seele

  • »R3D L10N« ist der Autor dieses Themas

Beiträge: 106

Beruf: Schüler

  • Private Nachricht senden

12

22.05.2010, 12:06

Kommt jez n bisschen spät aber egal: Also es ist tatsächlich blöd, dass immer wieder die gleichen Zahlen hereauskommen, wenn ich mein Proggi neu starte....

Zitat von »"Firefly"«

http://de.wikipedia.org/wiki/Mersenne-Twister

ööööhm....WAS?????? Sorry aber damit kann ich nun garnix anfangen :D Das ist momentan noch etwas zu hoh für mich(14).
Ich hab mich mal auf die suche nach fertigen Bibliotheken gemacht, aber da kommt immer nur soetwas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
unsigned mersenne_twister(void) {
  const int N = 624;
  const int M = 397;
  const unsigned A[2] = { 0, 0x9908b0df };
  const unsigned HI = 0x80000000;
  const unsigned LO = 0x7fffffff;

  static unsigned y[N];
  static int index = N+1;

  if (index >= N) {
    if (index > N) {
       // initialisiere y mit Pseudozufallszahlen:
       unsigned r = 9, s = 3402;
       for (int i=0 ; i<N ; ++i) {
          r = 509845221 * r + 3;
          s *= s + 1;
          y[i] = s + (r >> 10);
       }
    }
    unsigned h;
    for (int k=0 ; k<N-M ; ++k) {
       h = (y[k] & HI) | (y[k+1] & LO);
       y[k] = y[k+M] ^ (h >> 1) ^ A[h & 1];
    }
    for (int k=N-M ; k<N-1 ; ++k) {
       h = (y[k] & HI) | (y[k+1] & LO);
       y[k] = y[k+(M-N)] ^ (h >> 1) ^ A[h & 1];
    }
    h = (y[N-1] & HI) | (y[0] & LO);
    y[N-1] = y[M-1] ^ (h >> 1) ^ A[h & 1];
    index = 0;
  }

  unsigned e = y[index++];
  // tempering:
  e ^= (e >> 11);
  e ^= (e << 7) & 0x9d2c5680;
  e ^= (e << 15) & 0xefc60000;
  e ^= (e >> 18);
  return e;
}

Ne erläuterung steht nichtmal ausführlich bei wikipedia... :(
Gibt es nicht eine Möglichkeit, dass ganze etwas "kürzer und knapper" zu gestalten???
MfG R3DL10N

TSS

Frischling

  • Private Nachricht senden

13

22.05.2010, 12:12

Also ich denke doch mal für ein Programm, das einen Würfel simuliert brauchst du keinen Mersenne-Twister. Um bei jedem Programmstart andere Zufallszahlen zu bekommen kannst du z.B. folgendes aufrufen (einmal am Anfang des Programms):

C-/C++-Quelltext

1
srand((unsigned)time(0));

Dabei aber nicht

C-/C++-Quelltext

1
#include <ctime>

vergessen.
Danach dann einfach die Zufallszahlen mit rand() ausgeben lassen.

R3D L10N

Treue Seele

  • »R3D L10N« ist der Autor dieses Themas

Beiträge: 106

Beruf: Schüler

  • Private Nachricht senden

14

22.05.2010, 12:21

Also ich denke doch mal für ein Programm, das einen Würfel simuliert brauchst du keinen Mersenne-Twister. Um bei jedem Programmstart andere Zufallszahlen zu bekommen kannst du z.B. folgendes aufrufen (einmal am Anfang des Programms):

C-/C++-Quelltext

1
srand((unsigned)time(0));

Dabei aber nicht

C-/C++-Quelltext

1
#include <ctime>

vergessen.
Danach dann einfach die Zufallszahlen mit rand() ausgeben lassen.

Danke! Jetzt geht's ! Super :D
MfG R3DL10N

15

22.05.2010, 12:53

Früher oder später solltest du dir mal Boost ansehen. ;)
fka tm

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

16

23.05.2010, 13:32

Das stand alles aber auch in dem Link von Jonathan.
Les das mal, das erklärt eigentlich alles, was du wissen musst:
Zufälle gibts


Es empfiehlt sich wirklich den mal mit Geduld zu lesen und nicht nur kurz mal anzusehen. Wird auch zukünftige Fragen zu diesem Thema klären...

Mastermind

unregistriert

17

23.05.2010, 15:35

http://gamesbyemail.com/News/DiceOMatic

find ich sowas von toll.

Werbeanzeige