Hi,
Im having a problem with a function converted for me by another member, it seems to create a value out of range.
the delphi conversion is:
[pascal]
function carmack_func(const x: Single): Single;
var
halfx: Single;
carmack: Integer;
begin
halfx := x*0.5;
carmack := $5f3759df-(Trunc(x) Shr 1);
result := carmack*(1.5-halfx*carmack*carmack);
end;
[/pascal]
and the c++ version is:
Code:
inline float __fastcall carmack_func(float x)
{
int carmack;
float isx, halfx; //Inverse Squareroot of x
halfx = 0.5f*x;
carmack = *(int*)&x;
carmack = 0x5f3759df - (carmack>>1);
isx = *(float*)&carmack;
isx = isx*(1.5f-halfx*isx*isx); //Newton-Rhapson step, add more for accuracy
return isx;
}
and to be honest, im rather confused and dont understand this function ops:
Any help would be great
Many thanks
Nic
Bookmarks