2012-03-23 9 views
1

浮動小数点精度について質問があります。私が理解しているように、ULPは与えられた仕様の2つの連続した離散的な有限数の間の距離です。または、最下位にあるユニットが名前の状態になります。いずれにしても、java.lang.MathのsinhのJava仕様でこれを確認しました。整数でないULPエラー?

"計算結果は、正確な結果の2.5ulul以内でなければなりません。

整数ではないULPエラーをどのように持つことができるのか分かりません。あなたが2.5のULPsを外れている場合、それは最低重要地点より重要でない場所があることを暗示していませんか? 2.5 ULPの誤差があるのはどういう意味ですか?

答えて

7

計算3/2を考慮してください。正確な結果は1.5です。整数演算では、結果は1である。これは0.5の誤差、すなわち半分のULPである。

同様の推論を浮動小数点演算に適用できます。

+1

つまり、_exact_結果は浮動小数点値の間になる可能性があります。 –

+0

これは役に立ちました、ありがとう! – follyroof

0

いいえ。計算された値と正確な値が比較されるためです。

ULPが1で結果が0.5の場合、エラーは0.5 ULPになります。

0

ULPが適用される番号システムと同じ番号付けシステムで、小数のULPを使用してエラーを測定することはできません。たとえば、floatの値を計算していて、中間計算にdoubleを使用している場合などです。この場合、double値はより正確な値になり、floatは丸められた値になります。 2つの違いは、浮動小数点のULPよりも小さくなります。

これはMath.sinh()に関連しています。これは、コア言語APIの一部であるため、Javadocはすべての準拠実装が準拠しなければならない仕様として機能するためです。 Oracle JDK実装は、計算をネイティブ・メソッドに委譲します。基本的にJavadocが言っていることは、「このメソッドを実装することは自由ですが、常に十分な値を返すことが保証されている限り選択できます」

関連する問題