我在以下代码中找不到任何错误,MSVC#编译器将NAN存储在“c”中:
double c = Math.Pow(-8d, 1d / 3d);虽然我认为这一行应该计算"c“的-2,但编译器将NAN存储在"c”中?我说错了什么吗?
发布于 2011-01-18 19:08:37
浮点数的幂函数仅定义为正的基数或整数指数。试一试
double c = - Math.Pow(8d, 1d / 3d);实际上,1/3不能精确地表示为浮点数,但需要四舍五入。舍入指数的精确实数结果在理论上甚至不存在。
发布于 2011-01-18 19:11:39
通常,人们不会说(-8)^(1/3) = -2。
的确,(-2)^3 = -8是正确的,但负数的幂是一个复杂的问题。
您可以在Wikipedia上阅读有关该问题的更多信息
对数方法和有理指数方法都不能用来将^ r定义为负实数a和任意实数r的实数。实际上,对于每个实数r,er都是正的,因此对于≤0,ln(a)不被定义为实数。(另一方面,负数a的任意复数幂可以通过选择a的复对数来定义。)
简而言之,当a是负数时,很难在数学上恰当地定义a^r应该是什么,以免人们开始处理复数,因此人们通常应该避免尝试这样做。
发布于 2011-01-18 19:10:12
答案是一个复数:1.0+1.732050807568877i。.NET的Math类不支持复数。
https://stackoverflow.com/questions/4723320
复制相似问题