It is slow if you use it like ten thousand times in a loop, but still much faster than you can calculate it with a pencil and paper
should translate into this in assembly language. is it fast. this is always a relative question. floating point calculations are always more intensive then integer calculations.
/*
**
** [func] - _sqrtf.
** [desc] - calculates the square root of "eax" 32-bit float.
** [entr] - ss:[esp]: 32-bit floating point value.
** [exit] - eax: resulting square root.
**
*/
_sqrtf:
; store the base pointer.
push ebp
mov ebp, esp
; retrieve the 32-bit float value from the stack.
fld dword ptr ss:[ebp + 4]
fsqrt
; store the square root 32-bit float value to the stack.
fstp dword ptr ss:[ebp + 4]
mov eax, dword ptr ss:[ebp + 4]
; restore the base pointer.
pop eax
ret
/*
**
** [func] - _sqrtf.
** [desc] - calculates the square root of "eax" 32-bit float.
** [entr] - ss:[esp]: 32-bit floating point value.
** [exit] - eax: resulting square root.
**
*/
_sqrtf:
; store the base pointer.
push ebp
mov ebp, esp
; retrieve the 32-bit float value from the stack.
fld dword ptr ss:[ebp + 4]
fsqrt
; store the square root 32-bit float value to the stack.
fstp dword ptr ss:[ebp + 4]
mov eax, dword ptr ss:[ebp + 4]
; restore the base pointer.
pop eax
ret
For a Pentium II (the only processor I have available CC charts for) a fsqrt is 70 clock cycles. So, it''s not that bad, but something you should avoid if it is not needed.
[Resist Windows XP''s Invasive Production Activation Technology!]
[Resist Windows XP''s Invasive Production Activation Technology!]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement