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

public static double Pow(double x、double y)

1)xまたはy=NaN。

2)x <0ですが、NegativeInfinityではありません。yは整数、NegativeInfinity、またはPositiveInfinityではありません。

3)x = -1; y=NegativeInfinityまたはPositiveInfinity。

于 2012-03-27T17:15:51.743 に答える
1

Math.Powは、与えられたパワーの0未満の数値に対しては定義されていません。したがって、関数はいくつかのxで失敗します。

x <0ですが、NegativeInfinityではありません。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 に答える