bool g_bInvalidInput = false; double power(double base, int exponent) { if (equal(base, 0.0) && exponent < 0) { g_bInvalidInput = true; return 0.0; } unsigned int absExponent = (unsigned int)exponent; if (exponent < 0) absExponent = (unsigned int)(-exponent); double result = PowerWithUnsignedInt(base, absExponent); if (exponent < 0) result = 1.0 / result; return result; } bool equal(double value1, double value2) { if ((value1 - value2 > -0.0000001) && (value1 - value2 < 0.0000001)) return true; else return false; } double PowerWithUnsignedInt(double base, unsigned int absExponent) { if (absExponent == 0) return 1; if (absExponent == 1) return base; double result = PowerWithUnsignedInt(base, absExponent >> 1); result *= result; if (absExponent & 0x1 == 1) result *= base; return result; }