2012-03-27 11 views
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ですか?C#Math.pow(x、0.333)

リライト...

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

どのパラメータ値を使用しましたか? ( 'x'と' zn'は何ですか?) –

+0

これはすべてのパラメータ値で起こっていますか? –

+0

@HansKesting znのデフォルトは1ですが、xの例はniceです。 – Khan

答えて

11

私の推測では、あなたが負の数の立方根を取っているということです。あなたが実際にどの時点でxを変更していないとして、それは最も可能性の高い原因をようだが、あなたのコードが原因ローカル変数としてxXの両方を有することに読み本当に難しいです...綿密に検討した後

それは実際に入ってくる値xに依存します。 2以上の有限値であれば問題ありません。しかし、xが2より小さい場合は、単純な計算のために失敗します(NaNを返します)。

+0

私はこのコードを書き換えようとします。一瞬、 – LuckSound

+0

うん... 番号が2未満の場合は、それを書く方法は? – LuckSound

+0

@ lis.sanLee:あなたのコードの目的がわからないときは、これを言うことは不可能です。 –

1

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

x <負の値ではありません。 yは整数、負の整数、正の整数ではありません。
結果:NaNの

9

Math.PowがNaNを返したときにあなたがそこにすべての3例を見ることができます:

http://msdn.microsoft.com/en-us/library/system.math.pow.aspx

パブリック静的ダブルパウ(ダブルのx、ダブルy)を

1)xまたはy = NaN。

2)x <ただし、NegativeInfinityはありません。 yは整数、負の整数、正の整数ではありません。

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

0

hereを見ると、Math.PowがNaNを与えるすべての状況が説明されています。この場合はあなたの問題である可能性があります:

x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity. 
関連する問題