繁体   English   中英

C#Math.pow(x,0.333)

[英]C# Math.pow(x, 0.333)

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

我的猜测是您要使用负数的立方根。 这似乎是最可能的原因,但是由于xX作为局部变量,因此您的代码确实很难阅读...

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

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

http://msdn.microsoft.com/zh-CN/library/system.math.pow.aspx

公共静态double战俘(double x,double y)

1)x或y = NaN。

2)x <0,但不是NegativeInfinity; y不是整数,NegativeInfinity或PositiveInfinity。

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

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

x <0,但不是NegativeInfinity; y不是整数,NegativeInfinity或PositiveInfinity。
结果:NaN

如果您在此处查看它将说明Math.Pow将提供NaN的所有情况。 我怀疑这种情况可能是您的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM