User:Doomguy0505

From ZDoom Wiki
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; 
}