ご存知のように、IEEE浮動小数点数は、数値が浮動小数点の範囲内にある限り、すべての整数と、1/2や3/4などの2の累乗の整数倍の正確な表現を格納できます。ポイントタイプ。
ただし、浮動小数点パーサーは通常、そのような数値の10進表現を解析した正確な結果を保証しますか?
たとえば、Cプログラムでリテラル0.75
として使用する場合double
、コンパイラは、コンパイルされたコードに3/4の正確な表現が含まれていることを保証しますか、それとも、0.7の不正確な表現といくつかの不正確な表現の合計を生成するリスクがありますか? 0.05の不正確な表現?
または、同様に3e4
、リテラルとして使用する場合double
、正確な3に2 ^(4 * ln(10)/ ln(2))の不正確な表現または同様の数学を掛けることができますか?
この問題でFPパーサーが一般的に従う必要のある標準はありますか、それとも一般的に完全に実装に任されていますか?後者の場合、GCCやglibcのような実際に重要な実装が実際にどのように機能するかを知っている人はいますか?
私は主に好奇心を求めているだけであり、行動に依存したいからではありません。ただし、値が文字通りのソースからのみ取得されていることがわかっている場合は、FPの等価性の比較が機能することが保証されていることを知っておくと非常に便利な場合があります。