わかりました。一般的に、2つの浮動小数点数が等しいかどうかを比較することは想定されていません。しかし、William Kahanの「浮動小数点計算における丸めのマインドレス評価はどれほど無駄ですか?」彼は次のコードを示しています(擬似コード、私は信じています):
Real Function T(Real z) :
T := exp(z) ; ... rounded, of course.
If (T = 1) Return( T ) ; ... when |z| is very tiny.
If (T = 0) Return( T := –1/z ) ; ... when exp(z) underflows.
Return( T := ( T – 1 )/log(T) ) ; ... in all other cases.
End T .
今、私はこれをCまたはC ++で実装することに興味があり、2つの関連する質問があります。
a)Tをdoubleとすると、比較では(T == 1)または(T == 0)は0と1がdoubleに変換され、マルチタイプ式に含まれる値の精度が維持されます。 ?
b)これは、2つの浮動小数点数を比較して等しいと見なされますか?