考虑到我a ^ b
两者都是实数,a
和b
的值我将有一个复杂的答案$(m + n * i)$。
我发现有一个案例是以下情况:
a<0
和b = (2*k+1)/(2n)
; k in Z
和n in N
任何想法如何在C ++中实现?
P.S。 ^ - 是力量。
答案 0 :(得分:1)
正如我在评论中提到的,由于round-off errors,检查计算机中数字的合理表示几乎是不可能的。你可以解决它,但也许你可以忽略负数的特殊情况?
取幂的一个定义是负数不能被提升到任何幂(根据这个定义,( - 1)^ 2不存在)。用C ++表达:
bool can_has_power(double a, double b)
{
if (a < 0)
return false;
else if (a == 0)
return b != 0;
else
return true;
}
也许你想允许整数幂的特殊情况?这里:
bool can_has_power(double a, double b)
{
if (a < 0)
return fmod(b, 1) == 0;
else if (a == 0)
return b != 0;
else
return true;
}
b = m / n; n = 2^52
在此表示中,所有非整数数字具有奇数分子甚至分母!如果您在假设程序中使用b = 1/7
,则精确值1/7
将四舍五入为643371375338642/2^52
,根据有理数的规则,必须通过GCD调整分子和分母:321685687669321/2^51
。如果使用指数定义,那么 no 负数可以提升为任何非整数幂!