I just need the math function x^y with floating point.

But there is no straight function on the Pentium-FPU ?!?

How do I do it?

Thanks in advance,

VShader

But there is no straight function on the Pentium-FPU ?!?

How do I do it?

Thanks in advance,

VShader

Use Scali's power-routine:

/Delight

```
```

Power PROC a:REAL4, b:REAL4

LOCAL cw:WORD

LOCAL cwtemp:WORD

fstcw [cw] ; Save current control word

mov ax, [cw]

or ax, 0C00h ; Set rounding control to chop

mov [cwtemp], ax

fldcw [cwtemp]

; c = exp(b*log(a));

fld [b]

fld [a]

fyl2x ; st(0) = b*(2 log(a))

fld st(0) ; Duplicate log

frndint ; Round to integer. st(1) = b*(2 log(a)), st(0) = (int)(b*(2 log(a)))

fld st(1) ; ...and duplicate log again

fsubr ; st(0) = (b*(2 log(a)) - b*((int)(2 log(a))) (fraction only)

f2xm1 ; st(0) = 2^st(0) - 1 (2^x float portion)

fld1 ; add 1 again (why did that bastard sub it? :)

fadd

fscale ; Calc the 2^x integer portion, and multiply with 2^x float portion, to get complete 2^x (based on 2^i * 2^f = 2^(i+f))

fstp st(1) ; Clean up stack (fscale doesn't pop the scale argument...)

fldcw [cw] ; Restore control word

ret

Power ENDP

/Delight

Thanks :alright:

VShader

VShader

There are faster ways: X^Y = ln (X e^Y)

Look on the board for the exponent function.

Look on the board for the exponent function.