User:Doomguy0505
Jump to navigation
Jump to search
ACS Functions
// fixed: fixed x, int y
function int ipow(int x, int y)
{
int r = 1.0;
while(y > 0)
{
if (y & 1)
r = FixedMul(r, x);
y >>= 1;
x = FixedMul(x, x);
}
return r;
}
// fixed: int n, fixed k
function int nthrt(int n, int k)
{
if (k == 1.0) return 1.0;
if (k <= 0) return 0;
int x = k / n;
for(int i = 0; i < 15; i++)
x = ((n-1)*x + FixedDiv(k, ipow(x, n-1))) / n;
return x;
}
// fixed: fixed k
function int cbrt(int k)
{
if (k == 1.0) return 1.0;
if (k <= 0) return 0;
int x = k / 3;
for(int i = 0; i < 15; i++)
x = (x<<1 + FixedDiv(k, FixedMul(x, x))) / 3;
return x;
}
// fixed: fixed k
function int sqrt(int k)
{
if (k == 1.0) return 1.0;
if (k <= 0) return 0;
int x = k >> 1;
for(int i = 0; i < 15; i++)
x = (x + FixedDiv(k, x)) >> 1;
return x;
}