Italia
Fonte/ Codesnippets

Pseudozufall

 

p.specht

Trotz der -zigtausendfach besseren Performance heutiger Computersysteme opposto 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, possibile 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 corre das Betriebssystem". Auch dieser Wert ist irgendwann wieder bei Null angekommen und corre 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 disponibile machen. Das kann dann ja evtl. optimiert werden.

Werden per Verschlüsselungen nicht sowieso Zufallsfolgen necessario?
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
06.06.2021  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.983 Views

Untitledvor 0 min.
Walter28.11.2022
Stringray05.01.2022
p.specht21.11.2021
R.Schneider20.11.2021
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

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


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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