0
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;
    }
4

4 回答 4

11

我的猜测是你正在取负数的立方根。这似乎是最可能的原因,但是由于同时具有和作为局部变量,您的代码真的很难阅读......xX

经过仔细检查,由于您实际上并没有x在任何时候进行修改,因此它实际上取决于x. 如果它是一个大于或等于 2 的有限值,应该没问题。但是如果x小于 2,由于简单的数学原因,它将失败(嗯,返回 NaN)......

于 2012-03-27T17:14:46.907 回答
9

当 Math.Pow 返回 NaN 时,您可以看到所有 3 种情况:

http://msdn.microsoft.com/en-us/library/system.math.pow.aspx

公共静态双 Pow(双 x,双 y)

1) x 或 y = NaN。

2) x < 0 但不是负无穷大;y 不是整数、NegativeInfinity 或 PositiveInfinity。

3) x = -1;y = NegativeInfinity 或 PositiveInfinity。

于 2012-03-27T17:15:51.743 回答
1

对于给定的幂,未为小于 0 的数字定义Math.Pow 。因此,对于某些 x,您的功能将失败。

x < 0 但不是负无穷大;y 不是整数、NegativeInfinity 或 PositiveInfinity。
结果:NaN

于 2012-03-27T17:15:13.653 回答
0

如果你看这里,它解释了 Math.Pow 将给出 NaN 的所有情况。我怀疑这种情况可能是您的问题:

x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity.
于 2012-03-27T17:17:18.717 回答