[英]C# Math.pow(x, 0.333)
private double f(double x, double zn = 1)
{
double X = - zn;
X *= x * x * (x + 1);
X *= Math.Pow((x - 2), 0.333);
return funct ? x : X;
}
我有这个代码。 当我尝试找到Math.Pow((x-2),0.333)-我有NaN。 怎么解决呢? 为什么是NaN?
改写...
private double f(double x, double zn = 1)
{
double answer = - zn;
answer *= x * x * (x + 1);
answer *= Math.Pow((x - 2), 0.333);
return answer;
}
我的猜测是您要使用负数的立方根。 这似乎是最可能的原因,但是由于x
和X
作为局部变量,因此您的代码确实很难阅读...
经过仔细检查,由于您实际上并没有在任何时候修改x
,因此实际上取决于x
的传入值。 如果它是一个大于或等于2的有限值,那应该没问题。 但是如果x
小于2,由于简单的数学原因,它将失败(返回NaN)。
您可以看到Math.Pow返回NaN的所有3种情况:
http://msdn.microsoft.com/zh-CN/library/system.math.pow.aspx
公共静态double战俘(double x,double y)
1)x或y = NaN。
2)x <0,但不是NegativeInfinity; y不是整数,NegativeInfinity或PositiveInfinity。
3)x = -1; y = NegativeInfinity或PositiveInfinity。
对于给定功率,未为Math.Pow定义小于0的数字。 因此,您的功能将因x失败。
x <0,但不是NegativeInfinity; y不是整数,NegativeInfinity或PositiveInfinity。
结果:NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.