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;
【问题讨论】:
你使用了哪些参数值? (x
和zn
是什么?)
所有参数值都发生这种情况?
@HansKesting zn 默认为 1,但 x 的示例会很好。
可能x
小于2.0。
x 是函数的参数。 zn - 正或负函数返回
【参考方案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.
【讨论】:
以上是关于C# Math.pow(x, 0.333)的主要内容,如果未能解决你的问题,请参考以下文章