【问题标题】:C# Math.pow(x, 0.333)C# Math.pow(x, 0.333)
【发布时间】:2012-04-11 06:27:24
【问题描述】:
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和zn是什么?)
  • 所有参数值都发生这种情况?
  • @HansKesting zn 默认为 1,但 x 的示例会很好。
  • 可能x小于2.0。
  • x 是函数的参数。 zn - 正或负函数返回

标签: c# math nan pow


【解决方案1】:

我的猜测是您正在取负数的立方根。这似乎是最可能的原因,但您的代码真的难以阅读,因为 x 和 X 都作为局部变量...

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

【讨论】:

  • hmm... number小于2的时候怎么写?
  • @lis.sanLee:当我们不知道您的代码的用途时,这是不可能说的。
  • 我找到了解决这个问题的方法。我使用 Math.Abs​​(x-2),然后乘以数字符号。谢谢帮助
【解决方案2】:

当 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

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

【讨论】:

    【解决方案3】:

    Math.Pow 没有为给定幂的小于 0 的数字定义。所以你的函数会失败一些 x。

    x 结果:NaN

    【讨论】:

      【解决方案4】:

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

      x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity.
      

      【讨论】:

        猜你喜欢
        • 2014-01-25
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        相关资源
        最近更新 更多