我在以下代码中找不到任何错误,因此MSVC#编译器在“ C”中存储NAN:

double c = Math.Pow(-8d, 1d / 3d);

尽管我认为这条线应该为“ C”计算-2,但编译器将NAN存储在“ C”中?我对什么错了吗?

有帮助吗?

解决方案

浮点数的功率函数仅针对正基本或积分指数定义。尝试

double c = - Math.Pow(8d, 1d / 3d);

实际上,1/3不能完全表示为浮点数,但需要舍入。理论上甚至不存在圆形指数的确切结果。

其他提示

通常,人们不会说(-8)^(1/3)= -2。

的确,(-2)^3 = -8,但负数的能力是一个复杂的问题。

您可以阅读有关问题的更多信息 维基百科:

对数方法和理性指数方法都不能用于将a^r定义为负实际数字A和任意实际数字r的实数。实际上,er对于每个实际数字r都是正的,因此LN(a)并未定义为A≤0的实际数字。一个。)

简而言之,在数学上很难正确地定义A^r应该是负面的,以免一个人开始使用复杂数字,因此,一般而言,一个人应该避免尝试这样做。

答案是一个复杂的数字: 1.0+1.732050807568877i. 。 .NET的数学类不支持复杂数字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top