Deutsch
Quelltexte/ Codesnippets

Pseudozufall

 

p.specht

Trotz der -zigtausendfach besseren Performance heutiger Computersysteme gegenüber den Großrechnern der 1960-iger Jahre gibt es mathematische Probleme (z.B. Optimierungsaufgaben), die noch immer nicht mit reiner Rechenkraft vollständig gelöst werden können. Dann ist man auf sog. "Monte-Carlo-Methoden" angewiesen: Man zieht (wie im berühmten Spielcasino) statistisch Zufallsstichproben und schließt daraus auf das zugrunde liegende Verhalten des Gesamtsystems.

Voraussetzunng ist, daß ein leistungsfähiger, möglichst gleich-verteilter Zufallsgenerator zur Verfügung steht - gleichverteilt, weil der Generator selbst ja sonst die Ergebnisse verzerren würde. Aber auch die Anzahl der ziehbaren Stichproben geht in die Aussagekraft des Ergebnisses ein - wir brauchen also einen SEHR SCHNELLEN, ausreichend genauen und AUSGEZEICHNET GLEICHVERTEILTEN Zufallsgenerator. Das bezieht sich allerdings nur auf Single precision Floatingpoint.

P.S.: Welcher RND()-Algorithmus in XProfan verbaut ist weiß ich leider nicht.
WindowTitle "Einfacher, schneller Single Precision Pseudo-Random Generator"
' Rechtliches: Teilauszug aus ACM-Algo. Nr. 359 by John Burghardt
' Details und Referenzen siehe Anhang weiter unten! OHNE GEWÄHR!
Cls
declare seed&
seed&=12345
print
print " SOLL        12345   0.096616  207482415"
print seed&,r_uniform_01(),seed&
print
print " SOLL     207482415  0.833995  1790989824"
print seed&,r_uniform_01(),seed&
print
print " SOLL    1790989824  0.947702  2035175616"
print seed&,r_uniform_01(),seed&
print
waitinput
End

Proc r_uniform_01

    DECLARE k&,r_uniform_01!'extern_global: seed&
    k& = seed& \ 127773
    seed&= 16807*(seed&-k&*127773)-k&*2836
    case  seed&<0:seed&=seed&+2147483647
    return seed&*val("4.656612875e-10")

endproc

' *******************************************************************************
' R_UNIFORM_01 returns a unit SINGLE PRECISION pseudorandom number.
' This routine implements the recursion
'   seed = 16807 * seed mod (2^31-1)
'   r_uniform_01 = seed/(2^31-1)
' The integer arithmetic never requires more than 32 bits including a sign bit.
'
' If the initial seed is 12345, then the first three computations are
'       Input     Output      R_UNIFORM_01
'       SEED      SEED
'          12345   207482415  0.096616
'      207482415  1790989824  0.833995
'     1790989824  2035175616  0.947702
'
' Modified: 11 August 2004  Author: John Burkardt
' Reference:
'     Paul Bratley, Bennett Fox, L E Schrage,
'     A Guide to Simulation,
'     Springer Verlag, pages 201-202, 1983.
'
'     Pierre L'Ecuyer,
'     Random Number Generation,
'     in Handbook of Simulation,
'     edited by Jerry Banks,
'     Wiley Interscience, page 95, 1998.
'
'     Bennett Fox,
'     Algorithm 647:
'     Implementation and Relative Efficiency of Quasirandom
'     Sequence Generators,
'     ACM Transactions on Mathematical Software,
'     Volume 12, Number 4, pages 362-376, 1986.
'
'     P A Lewis, A S Goodman, J M Miller,
'     A Pseudo-Random Number Generator for the System/360,
'     IBM Systems Journal,
'     Volume 8, pages 136-143, 1969.
'
'   Parameters:
'
'     Input/output, integer SEED, the "seed" value, which should NOT be 0.
'     On output, SEED has been updated.
'
'     Output, real R_UNIFORM_01, a new pseudorandom variate,
'     strictly between 0 and 1.
'     Although SEED can be represented exactly as a 32 bit integer,
'     it generally cannot be represented exactly as a 32 bit real number!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
22.05.2021  
 




Michael
W.
Da XProfan in Delphi geschrieben ist:

Der Algo baut immer auf der vorhergehenden Zufallszahl auf. Es wird also immer eine Folge generiert, die durch Randomize neu initialisiert wird (ohne Randomize ist der erste Wert 0)

Die ermittelte Zahl (RandomSeed) wird in einem Longint gespeichert, also auf 2^32 gekappt.

Randomize holt neue Werte aus dem laufenden SystemCounter, also "seit wann läuft das Betriebssystem". Auch dieser Wert ist irgendwann wieder bei Null angekommen und läuft endlos.

Für normale Zufallszahlen reicht das, wenn am Programmstart einmal Randomize aufgerufen wird. Sonst sollte eine eigene Random-Funktion gebastelt werden.

Vielleicht sollten wir aus dem Internet mal einige brauchbare Formeln sammeln und in Form von RndNum(FormelNr,RandSeed) als Übervater verfügbar machen. Das kann dann ja evtl. optimiert werden.

Werden für Verschlüsselungen nicht sowieso Zufallsfolgen benötigt?
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
06.06.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.968 Betrachtungen

Unbenanntvor 0 min.
Walter28.11.2022
Stringray05.01.2022
p.specht21.11.2021
R.Schneider20.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Michael W. (1x)
p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie