| © 2010 W.Ehrhardt | Letzte Änderung 20. Aug. 2010 |
| Start | CRC/Hash | Krypto | Sonstiges | Info | Links | English |
| Sonstiges |
procedure generic_init(var ctx: generic_ctx; seed: longint);
{-Init context from seed}
procedure generic_init0(var ctx: generic_ctx);
{-Init context from randseed}
procedure generic_next(var ctx: generic_ctx);
{-Next step of PRNG}
procedure generic_read(var ctx: generic_ctx; dest: pointer; len: longint);
{-Read len bytes from the PRNG to dest}
function generic_long(var ctx: generic_ctx): longint;
{-Next random positive longint}
function generic_dword(var ctx: xor4096_ctx): {$ifdef HAS_CARD32}cardinal{$else}longint{$endif};
{-Next 32 bit random dword (cardinal or longint)}
function generic_word(var ctx: generic_ctx): word;
{-Next random word}
function generic_double(var ctx: generic_ctx): double;
{-Next random double [0..1) with 32 bit precision}
function generic_double53(var ctx: generic_ctx): double;
{-Next random double in [0..1) with 53 bit precision}
function generic_selftest: boolean;
{-Simple self-test of PRNG}
Tabelle der Generatoreigenschaften (C/B: CPU-Zyklen pro Byte,
MB/s: Millionen Bytes pro Sekunde mit 1.8 GHz Pentium 4 / Windows 98,
P7: Borland Pascal 7 Realmode mit 386 BASM;
isaac wurde kompiliert mit {$define testing}):
| Generator | ctx Größe | Periode ca. | C/B P7 | MB/s P7 | C/B D6 | MB/s D6 |
|---|---|---|---|---|---|---|
| random | (4) | 2**32 | 79.0 | 22.7 | 7.5 | 239.0 |
| taus88 | 16 | 2**88 | 80.5 | 22.3 | 6.5 | 275.8 |
| taus113 | 20 | 2**113 | 83.0 | 21.6 | 8.3 | 217.3 |
| kiss123 | 20 | 2**123 | 96.0 | 18.7 | 11.8 | 152.6 |
| tt800 | 106 | 2**800 | 230.8 | 7.8 | 18.1 | 99.2 |
| xor4096 | 522 | 2**4096 | 82.5 | 21.7 | 5.8 | 311.8 |
| mt19937 | 2502 | 2**19937 | 220.3 | 8.1 | 8.3 | 216.2 |
| aesr | 290 | 2**128 | 236.0 | 7.6 | 28.4 | 63.2 |
| salsar | 202 | 2**70 | 109.3 | 16.4 | 14.4 | 124.8 |
| isaac | 2066 | 2**8295 | 109.5 | 16.3 | 9.1 | 197.8 |
Es ist seit mehr als 15 Jahren bekannt, daß exp bis zu 13 Bits für extended Argumente verliert; selbst die neuesten Delphi-Versionen haben schlimme Bugs: z.B. arccsch(2) = 0.27980789397 (korrekt = 0.48121182506); coth(12000)=1 stürzt ab, sinh(x)/x=0 statt 1 für kleine x, sin(1e22)=1e22 (korrekt = -0.852200849767); StdDev(a,a+1,a+2) stürzt ab für a=100000000000; usw.
Die elementaren mathematischen Funktionen umfassen:
Exponential-, Logarithmus-, trigonometrische, hyperbolische, inverse
trigonometrische / hyperbolische Funktionen.
Weiter gibt es Polynom-, Vektor- und Statistikprozeduren,
sowie Fließkomma- und FPU-Kontrollfunktionen.
Delphis unsinnige Routinen
(IfThen, IsZero, InRange ...) und seine Finanzfunktionen sind nicht
(und werden auch nicht) implementiert. Hier ist die vollständige Liste der
AMath-Funktionen mit kurzen Beschreibungen.
Alle elementaren transzendenten Standard-Funktionen mit einem Argument haben
maximale relative Fehler kleiner als 1.9e-19, der Wert für power(x,y)
ist 2.8e-18. Die Genauigkeit wird ermittelt mit dem Programm
t_amathx, das MPArith-Prozeduren benutzt.
| Start | CRC/Hash | Krypto | Sonstiges | Info | Links | English |