AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 11 kein RandomRange für 64-bits?

Ein Thema von softtouch · begonnen am 23. Apr 2022 · letzter Beitrag vom 11. Aug 2022
 
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
745 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Delphi 11 kein RandomRange für 64-bits?

  Alt 3. Mai 2022, 09:24
Ich meinte natürlich "Verlängerungsalgorithmus". Da hat unbemerkt die Autokorrektur des Tablets zugeschlagen gehabt...
Aber: was würde eigentlich dagehen sprechen das ungefähr so umzusetzen:

Delphi-Quellcode:
var
  r1, r2: UInt32;
  r: UInt64;
begin
  r1 := Random; // oder eine unbiased Alternative
  r2 := Random;
  r := (r1 shl 32)+r2;
Falls die von deinem random erzeugte 0-1 Folge völlig zufällig ist, dann geht das. Dann kannst du beliebig viele Bits aneinanderreihen.

Aber wie Gausi (und weiter oben Uwe) schreibt: Beim von Delphi verwendeten Generator sind die Zahlen alles andere als zufällig. Der Generator erzeugt die immer gleiche Zahlenfolge; alle Zahlen werden genau einmal erzeugt, bis wir wieder bei der ersten landen. Durch randseed legst du lediglich den Startwert der Zahlenfolge fest.

Wenn du einen solchen Generator wie du oben vorschlägst erweiterst, dann haust du massive Löcher in die Wertemenge.
(Ist fast ein wenig wie wenn du vorschlägst einen Text 2x512Bit zu verschlüsseln statt einmal mit 1024Bit.)

Sehr vereinfachend beschrieben:
Nimm an du hättest einen Generator, welcher immer die aus 10 Elementen bestehende Folge
0 1 2 3 4 5 6 7 8 9 (und dann wieder 0 1 2...) erzeugt.
Mit deiner Konstruktion würde der neue Generator
01 23 45 67 89 und dann wieder 01 erzeugen. Dein Generator hätte nur einen Bruchteil der von dir gewollten 100 Zahlen 00 bis 99 erzeugt.

Auf https://de.wikipedia.org/wiki/Kongruenzgenerator siehst du das von Gausi erwähnte typische Hyperebenenverhalten des in Delphi verwendeten Generators graphisch dargestellt.


Du könntest den 32Bit Delphi Generator natürlich für komplexere 64Bit Konstruktionen verwenden (zum Beispiel mehrere Generatoren mit verschiedenen randseeds verwenden und je nur eine Dezimalstelle (oder nur 4 Bits) berechnen). Aber das feste Muster wird dir viele Fallen stellen. Und der Speed wird dabei so fest leiden, dass du lieber zu einer 64Bit Lösung greifst.
Michael Gasser
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz