2

为什么 dResult 的输出无效?
环境:Visual Studio 2008

int _tmain(int argc, _TCHAR* argv[])  
{  
   double dN = - 0.091023604111478473 ;  
   double dD = 0.127777777777777;  
   double dResult =  pow( dN,dD );   
   //dResult = -1.#IND000000000000  
   return 0;  
}   
4

4 回答 4

8

http://www.cplusplus.com/reference/clibrary/cmath/pow/

double pow (double base, double exponent );

“如果底数为负且指数不是整数值,或者如果底数为零且指数为负数,则会发生域错误,将全局变量 errno 设置为值 EDOM。”

于 2010-11-05T17:30:42.713 回答
3

如果您的 dD 值是 0.25 而不是您提供的分数,那么您可以看到它实际上是取第四根而不是负数的指数。你的分数接近八分之一根。你需要复数来表达函数应该给出的答案。

于 2010-11-05T17:30:28.163 回答
3

这是预期的结果,因为 dN 是负数。pow(dN,dD)的结果;仅当 dN 为正或 dD 为整数时才定义。否则,结果为复数。例如, pow(-1., 0.5) 也不起作用。

于 2010-11-05T17:32:09.903 回答
0

那么,0.127777777 是什么数字?它的 smt 像 1277777777/(10....0)

1277777777777 不是偶数,因此 -smt 的 12777777777 次方是一个负数,并且其 10...0th root 不是实数。

我指的是 a^(b/c) = (c-th root from)(a^b)

于 2010-11-05T17:31:08.100 回答