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;
}
Run Code Online (Sandbox Code Playgroud)
我有这个代码.当我试图找到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;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
我的猜测是你正在采用负数的立方根.这似乎是最可能的原因,但由于同时具有局部变量和代码,您的代码实际上很难阅读...xX
仔细检查之后,因为你实际上x并没有在任何时候进行修改,它实际上取决于传入的值x.如果它是一个大于或等于2的有限值,它应该没问题.但是如果x小于2,由于简单的数学原因,它将失败(好吧,返回NaN)...
当Math.Pow返回NaN时,您可以看到所有3种情况:
http://msdn.microsoft.com/en-us/library/system.math.pow.aspx
public static double Pow(double x,double y)
1)x或y = NaN.
2)x <0但不是NegativeInfinity; y不是整数,NegativeInfinity或PositiveInfinity.
3)x = -1; y = NegativeInfinity或PositiveInfinity.
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |