News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

the random of floating point data

Started by six_L, September 18, 2024, 02:13:27 AM

Previous topic - Next topic

six_L

Hi,all
FP10 MACRO value
        LOCAL vname
        .data
        align 8
        vname REAL10 value
        .code
        EXITM <vname>
ENDM

randf proc @Fmax:QWORD,@Fmin:QWORD
LOCAL num:REAL8
LOCAL @rdx:QWORD

mov @rdx,rdx

finit
fld tbyte ptr [rcx] ;Fmax
fld tbyte ptr [rdx] ;Fmin
fsub ;st0= Fmax-Fmin

invoke iRand, 0, 0000FFFFFFFFFFFFFh
mov       rcx,03FF0000000000000h
or rax,rcx
mov num,rax

fld num ;[1.0-2.0)
fld1
fsub ;[0.0-1.0)

fmul ;[0.0-1.0)*(Fmax-Fmin)
mov rdx,@rdx
fld tbyte ptr [rdx] ;Fmin
fadd ;[0.0-1.0)*(Fmax-Fmin) + Fmin
ret

randf endp

1. the above codes can create the random(REAL8) of floating point data. it's faster six times than some codes who used the "FDIV" instructs.
i used the " GdipDrawEllipse " API to test its result well. The x y(REAL4) coordinates of every little circle is the random of floating point data.
as the following png.
2. How to use
    local x11:REAL4
    local y11:REAL4
    local Fmin:REAL10
    local Fmax:REAL10
       
    finit
    fld    FP10(-3.2)
    fstp    Fmin
    fld    FP10(6.12)
    fstp    Fmax
    invoke  randf,addr Fmax,addr Fmin        ;st0=[@Fmin,@Fmax)
    fstp    x11
3. do you know the other method without "FDIV", that can create a random of floating point data?
Say you, Say me, Say the codes together for ever.