C# Math.pow(x, 0.333)

Posted

技术标签:

【中文标题】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;
    

【问题讨论】:

你使用了哪些参数值? (xzn是什么?) 所有参数值都发生这种情况? @HansKesting zn 默认为 1,但 x 的示例会很好。 可能x小于2.0。 x 是函数的参数。 zn - 正或负函数返回 【参考方案1】:

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

经过仔细检查,由于您实际上并没有在任何时候修改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.

【讨论】:

以上是关于C# Math.pow(x, 0.333)的主要内容,如果未能解决你的问题,请参考以下文章

Math.pow

JavaScript Math 对象

JS中的Math.pow(a,b)方法

JavaScript Math 对象

JavaScript基础 Math.pow(x,y) x的y次方

python函数深入浅出 11.math.pow()及其相关函数详解