在此C#代码中,我如何使用Math.pow(a,b)功能如何错误?
题
我在以下代码中找不到任何错误,因此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的数学类不支持复杂数字。
不隶属于 StackOverflow