Thema: Delphi Zufallszahl ermiteln

Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#14

Re: Zufallszahl ermiteln

  Alt 17. Mai 2004, 17:24
Zitat von eroe:
ehrlich ? nach welchem schema werden die "pseudo"-zufallszahlen denn in delphi erstellt ? ich mein wenn das stimmt was du sagst, dann können sie doch gar nich 100% zufällig sein oder ?
Wie der Name "Pseudo-" schon sagt, sind diese nicht echt. Delphi berechnet diese. Der relavante Teil ist in Delphi 7 wie folgend (ändert sich von Version zu Version)
Delphi-Quellcode:
procedure _RandInt;
asm
{     ->EAX     Range   }
{     <-EAX     Result  }
        PUSH EBX
{$IFDEF PIC}
        PUSH EAX
        CALL GetGOT
        MOV EBX,EAX
        POP EAX
        MOV ECX,[EBX].OFFSET RandSeed
        IMUL EDX,[ECX],08088405H
        INC EDX
        MOV [ECX],EDX
{$ELSE}
        XOR EBX, EBX
        IMUL EDX,[EBX].RandSeed,08088405H
        INC EDX
        MOV [EBX].RandSeed,EDX
{$ENDIF}
        MUL EDX
        MOV EAX,EDX
        POP EBX
end;

procedure _RandExt;
const two2neg32: double = ((1.0/$10000) / $10000); // 2^-32
asm
{       FUNCTION _RandExt: Extended;    }

        PUSH EBX
{$IFDEF PIC}
        CALL GetGOT
        MOV EBX,EAX
        MOV ECX,[EBX].OFFSET RandSeed
        IMUL EDX,[ECX],08088405H
        INC EDX
        MOV [ECX],EDX
{$ELSE}
        XOR EBX, EBX
        IMUL EDX,[EBX].RandSeed,08088405H
        INC EDX
        MOV [EBX].RandSeed,EDX
{$ENDIF}

        FLD [EBX].two2neg32
        PUSH 0
        PUSH EDX
        FILD qword ptr [ESP]
        ADD ESP,8
        FMULP ST(1), ST(0)
        POP EBX
end;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat