C#Math.pow(x,0.333)

Luc*_*und 0 c# math nan pow

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)...


Rus*_*lan 9

当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.