0

こんにちは、Java コードに次の式があります。

double z = 0.002378 * (Math.pow((1 - (Math.pow(6.875, -6) * y)), 4.2561));

y を非常に大きな値に設定すると、つまり(数値ではありませ200000Nan) わずかに低い値で問題なく動作します。130000

その理由を誰か教えてもらえますか?

さらに、上記のコードを元の BASIC プログラムから移植しようとしました。

.002378*(1-(6.875*10^-6*ALT))^4.2561

私はそれを間違ったことをしたかもしれませんか?操作の順序は、BASIC コードではあまり明示的ではありません

ありがとう

4

3 に答える 3

3

Javadoc for がMath.pow説明しているように:

最初の引数が有限でゼロより小さい場合 […そして] 2 番目の引数が有限で整数でない場合、結果は NaN になります。

したがって、あなたyが十分に大きい場合はいつでも、 1 - (Math.pow(6.875, -6) * yNaN が得られます。

(これは、基礎となる数学を考慮すると理にかなっています。非整数乗の負の数は実数ではなく、double複素数を表す方法がありません。)


更新された質問のために編集:

Basic コードには6.875*10^-6(6.875 × 10 −6を意味する) がありますが、Java コードにはMath.pow(6.875, -6)(6.875 −6を意味する) があり、これはやや大きい値であるため、Java コードは の値がやや小さい場合にこの問題を引き起こしますy。これが、現在この問題が発生している理由かもしれません。Basic コードに合わせるには、 に変更Math.pow(6.875, -6)する必要があります6.875e-6

于 2013-03-17T16:23:20.330 に答える
0

負の数を非整数乗すると、複素数数学では虚数になり、Java 算術では NaN になります。本当にその計算を行う必要がある場合は、複素数パッケージが必要です。ただし、方程式にエラーがあるか、有効範囲外で使用しようとしている可能性が高くなります。

于 2013-03-17T16:24:15.867 に答える
0

実数べき乗の負の数は NAN になる可能性があります

于 2013-03-17T16:26:08.343 に答える