为什么这样:
cout << pow(-3, (1.0 / 3))
返回
-nan(ind)
,而
pow(-3, 3)
和
pow(3, (1.0 / 3))
都可以正常工作吗?
答案 0 :(得分:3)
pow功能仅用于正数。
请参阅pow function的手册页:
如果x是小于0的有限值,并且y是有限非整数,则a 发生域错误,并返回NaN。
要获得数字的力量,您可以尝试这样:
int main() {
int exp;
float base, power = 1;
cout << "Base and exponent : ";
cin >> base >> exp;
while (exp != 0) {
power *= base;
--exp;
}
cout << "Output = " << power;
return 0;
}
答案 1 :(得分:3)
pow(x, y)
可能实现为exp(y * ln(x))
。
ln(x)
对于否定数字失败,或为零。
答案 2 :(得分:3)
这是因为数学上负数的分数幂提供了一个复数。
对于std :: pow的 Reference声明&#34; pow(base, exp)
返回NaN并且如果base是有限的并且是负的并且exp是有限且非整数则引发FE_INVALID。&#34;
答案 3 :(得分:0)
这是简单的数学:
答案 4 :(得分:0)
您可以在cppreference.com战俘页面上找到特殊情况的列表:
按照math_errhandling中指定的方式报告错误。
如果base为有限且为负,而exp为有限且非整数,则将发生域错误,并且可能会发生范围错误。
如果base为零且exp为零,则可能会发生域错误。
如果base为零且exp为负,则可能会发生域错误或极点错误。
如果实现支持IEEE浮点算术(IEC 60559),
pow(+0, exp)
,其中exp是一个负整数,返回+∞并引发FE_DIVBYZERO pow(-0, exp)
,其中exp是一个负整数,返回-∞并引发FE_DIVBYZERO pow(±0, exp)
,其中exp为负,有限且是偶数或非整数,-返回+∞并引发FE_DIVBYZERO pow(±0, -∞)
返回+∞并可能提高FE_DIVBYZERO pow(+0, exp)
,其中exp是一个正整数,返回+0 pow(-0, exp)
,其中exp是一个正整数,返回-0 pow(±0, exp)
(exp是非整数正数或偶数正整数)返回+0 pow(-1, ±∞)
返回1 pow(+1, exp)
对于任何exp都返回1,即使exp为NaN pow(base, ±0)
对于任何底数都返回1,即使底数是NaN pow(base, exp)
返回NaN,如果base为负数且exp为有限且非整数,则返回FE_INVALID。pow(base, -∞)
对于任何| base | <1 pow(base, -∞)
对于任何| base |> 1 pow(base, +∞)
对于任何| base | <1 pow(base, +∞)
对于任何| base |> 1 pow(-∞, exp)
返回-0 pow(-∞, exp)
返回+0 pow(-∞, exp)
如果exp是一个正整数,则返回-∞pow(-∞, exp)
返回+∞pow(+∞, exp)
对于任何负数返回+0 pow(+∞, exp)
对于任何正数返回+∞
除非上面指定,否则如果参数为NaN,则返回NaN