Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Random - immer die gleiche Reihenfolge in der Zahlen kommen? (https://www.delphipraxis.net/41074-random-immer-die-gleiche-reihenfolge-der-zahlen-kommen.html)

malo 25. Feb 2005 15:54


Random - immer die gleiche Reihenfolge in der Zahlen kommen?
 
Delphi-Quellcode:
  Zahl1 := random(99) + 1;
  Zahl2 := random(99) + 1;
Wenn ich jetzt die Zahl abfrage, erhalte ich immer, wenn ich das Programm neu starte, Zahl1 = 1 und Zahl2 = 4. Warum passiert sowas?

//edit: Beim zweiten Mal krieg ich immer 86 und 21. Weiter hab ich noch nicht geprüft :-?

Dax 25. Feb 2005 15:55

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Kuck mal hier: [dp]Wie zufällig ist Random[/dp] Dort sind die Sachverhalte des Delphi-RNGs ein wenig genauer beschrieben ;)

Edit: Noch besser http://www.delphipraxis.net/internal...ct.php?t=27741

sniper_w 25. Feb 2005 15:56

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Bevor du random aufrufst , musst du Randomize aufrufen.

Die Muhkuh 25. Feb 2005 15:58

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Hi,

vielleicht Randomize; vergessen? ;)

malo 25. Feb 2005 16:00

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
@Dax: Danke schonmal :thumb:

@Spider und sniper_w: :wall: daran hats wohl gelegen, jetzt klappts :mrgreen:

Chegga 25. Feb 2005 16:04

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Hi,

ich würde auch schwer dazu tendieren, dass du randomize im OnCreate vergessen hast. :wink:

Mit Randomize wird ein Zufallsgenerator gestartet.
Nach einer Formel von Delphi wird ein zufälliger Startwert ermittelt,
der Datum und Uhrzeit zur Hilfe nimmt.
Da Uhrzeit und Datum meistens verschieden sind, ist alles Zufall.

MfG Marc

malo 25. Feb 2005 16:07

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Zitat:

Zitat von Chegga
Hi,

ich würde auch schwer dazu tendieren, dass du randomize im OnCreate vergessen hast. :wink:

Mit Randomize wird ein Zufallsgenerator gestartet.
Nach einer Formel von Delphi wird ein zufälliger Startwert ermittelt,
der Datum und Uhrzeit zur Hilfe nimmt.
Da Uhrzeit und Datum meistens verschieden sind, ist alles Zufall.

MfG Marc

Ich hab ja schon gesagt, dass ich Randomize vergessen hatte :oops:


Auf jeden Fall funktioniert es jetzt super :thumb:

Airblader 25. Feb 2005 16:13

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Hi :)
Bin mir nicht sicher ob du es weisst, aber man sollte Randomize übrigens nur 1x aufrufen (z.B. im OnCreate)

*was gelernt hat vor einiger zeit* :stupid:

malo 25. Feb 2005 16:17

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Zitat:

Zitat von Airblader
Hi :)
Bin mir nicht sicher ob du es weisst, aber man sollte Randomize übrigens nur 1x aufrufen (z.B. im OnCreate)

*was gelernt hat vor einiger zeit* :stupid:

Das wusste ich bereits vorher. Und ich wusste auch, dass man Randomize aufrufen muss, hab es nur irgendwie vergessen :wall:






:mrgreen:

himitsu 25. Feb 2005 19:15

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Und für alle, die jetzt denken dieser Verhalten ohne Randomize, also das immer wieder die "selben" Zahlenfolgen entstehen, jetzt z.B. für 'ne Verschlüsselung, oder ähnliches zu verwenden ... davon ist abzuraten, da sich diese Zahlenfolgen von Compilerversion zu Compilerversion ändern können!


[das sollte wohl sicherheitshalber nochmal erwähnt werden]

sniper_w 25. Feb 2005 21:54

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Und eine Compiler unabhängige version (aus C hilfe genommen):

Zitat:

static unsigned long int next = 1;
int myrand(void) /* RAND_MAX assumed to be 32767 */
{
next = next * 1103515245 + 12345;
return((unsigned int)(next/65536) % 32768);
}

void mysrand(unsigned int seed)
{
next = seed;
}
In Delphi:
Delphi-Quellcode:
var next:cardinal = 1;

function myrand():cardinal   /* RAND_MAX assumed to be 32767 */
begin
    next := next * 1103515245 + 12345;
    Result := cardinal( (next div 65536) mod 32768);
end;

procedure mysrand(seed : cardinal)
begin
    next := seed;
end;

Binärbaum 26. Feb 2005 01:12

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Ich habe hioer noch eine ähnliche Variante:
Delphi-Quellcode:
var x: Cardinal;

function MyRandom: Cardinal;
begin
 x:= (45*x+853) mod 1024;
 Result:= x;
end;

procedure RandomInit(start: Cardinal);
begin
 x:= start;
end;
Diese Funktion erzeugt zwar nur Zufallszahlen von 0 bis 1023, und nach 1024 Aufrufen beginnt die Folge wieder von vorn. Aber dafür sind die Zahlen gleichverteilt, es kommt in 1024 Aufrufen dieser Funktion jede der Zahlen von 0..1023 einmal als Ergebnis. Ebenso erhält man damit stets die gleiche Zufallszahlenfolge, wenn man den gleichen Startwert angibt (ist ja logisch). Damit kann man die Zahlenfolge auch für eine Verschlüsselung nehmen.

MfG
Binärbaum

negaH 26. Feb 2005 02:06

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Wenn wir mal bei Aufklärung sind:

Zitat:

Ebenso erhält man damit stets die gleiche Zufallszahlenfolge, wenn man den gleichen Startwert angibt (ist ja logisch). Damit kann man die Zahlenfolge auch für eine Verschlüsselung nehmen.
Du hast bei jedem beliebigen Startwert immer nur ein und die selbe Zufallsfolge. Jeder Psudozufallsgenerator produziert immer nur eine Zufallsfolge und nicht mehrere unterschiedliche. Der Startwert legt nur den Start ab dem du die Zufallsfolge erzeugst fest. Wird bei deinem PRNG also mit einem beliebigen Startwert 1024 Werte erzeugt dann kommst du automatisch wieder zum Startwert und beginnst die Folge von neuem, ergo: bei einem belibigen Startwert handelt es sich immer und die selbe Zufallsfolge, der RNG erzeugt immer nur eine.

Demozufolge ist die maximale Länge der eindeutigen Zufallsfolge ein wichtiges Kriterium. Ist sie zu kurz so kann man alle Zustände der Folge exakt durchrechnen. Ist sie aber lang genug, zb. 2^128, dann wird es schwierig in einem Menschenleben die komplette Folge zu berechnen. Fazit: nimmt man solch große RNGs und startet sie mit einem beliebigen zufälligen Startwert dann ist die Wahscheinlichkeit verschwindend gering das man die gleiche Folge von Zahlen berechnet. Man könte es dann so betrachten als wären es immer unterschiedliche Zufallsfolgen, obwohl es real immer die selbe Zufallsfolge ist, nur an anderer Position der Berechnung.

Wie oben angedeutet kann man auch aus diesem Grund den Delphi Random nicht für die Kryptographie benutzen, er ist mit 2^31 viel zu kurz und zudem noch vorherberechenbar.

Gruß Hagen

4toms 26. Feb 2005 09:34

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Blöde/möglicherweise sehr dumme Frage:

Wenn ich mit Randomize eine Zufallszahl ermittle, die wiederum als Basis für das nächste Randomize (+-LongInt) benutze und das Ergebnis durch ein randomized Ergebnis meiner Schuhgrüße (statt meiner Shuhgröße) ermittelt:

Stimmt es, das es sogar die echten Windows-Profis nur mit > 200 Jahren Rechnerlaufzeit rauskriegen?

Es sei denn, die echten Windows-Profis haben Zugriff auf die Codes der amerikanischen Geheimdienste?

Wer oder was hat Zugriff auf welche Daten nochmal?

negaH 26. Feb 2005 11:24

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Zitat:

Stimmt es, das es sogar die echten Windows-Profis nur mit > 200 Jahren Rechnerlaufzeit rauskriegen?
In deinem Falle mit einem +-LongInt und Randomize, stimmt es nicht. Das kann jeder auf einem normalen PC innerhalb erträglicher Zeit rauskriegen, zb. in einem Jahr an Berechnungen mit einem normalen PC.

Zitat:

Es sei denn, die echten Windows-Profis haben Zugriff auf die Codes der amerikanischen Geheimdienste?
Was hat das mit den Geheimdiensten zu tun. Random() aus Delphi ist ein stinkbormaler LCG=Linear Congruence Generator, kurz ein normaler modularer Ring. Die dazu nötige Mathematik ist seit 200 Jahren weitestgehend erforscht. Wenn überhaupt taugen die LCG's für einfachste statistische Aufgaben, für mehr nicht.

Zitat:

Wer oder was hat Zugriff auf welche Daten nochmal?
Wenn die Experten deine Gewohnheiten unter die Lupe nehmen, deine Umgebung über dich befragen, deinen Müll und Wohnung durchwühlen, so können die ne ganze Menge über dich und dein Denken herausbekommen. So besonders untercheidet sich kein Mensch von dem anderen.

Schuhgrößen ? Wieviele verschiedene Schuhgrößen gibt es bei männlichen Personen deines Alters ? Da du ja hier im Forum schon angedeutet hast das du deine Schuhgröße benutzen möchtest, bleiben ja nicht viele Kombinationsmöglichkeiten übrig, oder !

Gruß Hagen

Binärbaum 26. Feb 2005 13:03

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Zitat:

Zitat von negaH
Der Startwert legt nur den Start ab dem du die Zufallsfolge erzeugst fest. Wird bei deinem PRNG also mit einem beliebigen Startwert 1024 Werte erzeugt dann kommst du automatisch wieder zum Startwert und beginnst die Folge von neuem, ergo: bei einem belibigen Startwert handelt es sich immer und die selbe Zufallsfolge, der RNG erzeugt immer nur eine.

Habe ich etwa was anderes behauptet? Ich habe doch geschrieben, dass die Zufallszahlen nach 1024 Werten wieder von vorne anfangen. :gruebel:

MfG
Binärbaum

negaH 26. Feb 2005 13:08

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Nöö haste nicht, aber ich sehe oft Beiträge bei denen das anders rüberkommt, und ich wollte es endlich mal loswerden :)

Gruß Hagen

Chegga 26. Feb 2005 13:12

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Hi @ all,

imho ist malos Frage vollständig geklärt. :wink:
Also bitte kein OT mehr...

MfG Marc

P.S.: @ negaH + Binärbaum: Klärt eure "Probleme" per PN. :zwinker:

[Edit] Auf die Anspielung von negaH werde ich mich öffentlich nicht äußern. [/Edit]

negaH 26. Feb 2005 14:38

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Entschuldige Chegga das ich deine Arbeit als Foren-Administrator der DP nicht genügend gewürdigt habe. Ich glaube ich habe in der DP noch einige andere Threads gesehen die OT geworden sind und eine Ermahnung benötigen. Wenn du willst schicke ich sie dir als PN, nenne dir Namen, Addressen und Gewohnheiten der bösen Buben.

Sorry, aber das ist echt ein Grund meine Arbeit hier im Forum einzustellen.

Gruß Hagen

malo 26. Feb 2005 14:53

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Zitat:

Zitat von negaH
Entschuldige Chegga das ich deine Arbeit als Foren-Administrator der DP nicht genügend gewürdigt habe. Ich glaube ich habe in der DP noch einige andere Threads gesehen die OT geworden sind und eine Ermahnung benötigen. Wenn du willst schicke ich sie dir als PN, nenne dir Namen, Addressen und Gewohnheiten der bösen Buben.

Sorry, aber das ist echt ein Grund meine Arbeit hier im Forum einzustellen.

Gruß Hagen

Er wollte doch nur darauf hinweisen, dass eure "Streitereien" nicht in den Thread gehören. Meine Frage ist bereits beim 3. Post geklärt gewesen. Klärt das doch mal ernsthaft bitte per PN.

@negaH: Auf dieses Niveau muss man sich ja wohl nicht herablassen, oder? :roll:

@Mods: Bevor noch weitere Diskusionen hier beginnen, schließt den Thread bitte mal. Alles weitere kann ja per PN geklärt werden. Danke.

Sharky 27. Feb 2005 08:24

Re: Random - immer die gleiche Reihenfolge in der Zahlen kom
 
Hai ihr alle :-)

Jetzt muss hier wohl doch einmal ein Moderator eingreiffen.

Es ist natürlich richtig das die Frage schon recht früh geklärt wurde, aber ich denke es ist durchaus legitim auf die Schwachstellen von bestimmten Funktion hinzuweisen auch wenn dies in diesem Fall nicht 100% etwas mit der Frage zu tun hat.

Auf keinen Fall sollte so etwas der Anlass sein sich hier zu streiten oder, noch schlimmer, sich zu überlegen das Forum zu verlassen.

Ein Vorschlag von mir wäre:
  • Überlasst es den Moderatoren zu moderieren. Sonst kann es eben ganz schnell zu bösem Blut kommen
  • Hagen könnte ja so lieb sein und einmal seine Gedanken zu den Zufallszahlen zusammen schreiben und diese in der Tutorial-Sparte posten.
  • Alle gucken ganz lieb und vertragen sich wieder :love:

Na, ist das etwas mit dem ihr leben könnt? :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz