#define MIN 0.000001

double Power_unsigned(double base, unsigned int exponent)
{
	int i;
	double result = 1.0;

	if (exponent == 0)
		return 1;
	if (exponent == 1)
		return base;
	
	result = Power_unsigned(base, exponent >> 1);
    result *= result;
    
	if (exponent & 0x1)
		result *= base;

	
	return result;
}

double Power(double base, int exponent ) {
    double result = 1.0;

	if (base<MIN && base>-MIN && exponent < 0)
		return 0.0;

	unsigned int absE = (unsigned int)(exponent);
	if (exponent<0)
		absE = (unsigned int)(-exponent);
	
	result = Power_unsigned(base, absE);
	if (exponent < 0)
		result = 1.0 / result;
	return result;
}