| |
|
|
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 11Computer: 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? |
|
|
| |
|
|