Skip to content

bin_float 適合性

この文書は 0.7.1 における 2 進浮動小数点の意味論と検証境界を記録 します。有限のテストが全通過しても、すべての実数入力に対する形式的証明を 意味しません。

標準・論文・参照実装

  • IEEE 754-2019:interchange format、丸め方向、符号付きゼロ、NaN、例外、 丸め前/後 tininess の意味論。
  • Fousse、Hanrot、Lefèvre、Pélissier、Zimmermann、 MPFR: A Multiple-Precision Binary Floating-Point Library with Correct Rounding、 ACM TOMS 33(2), 2007:厳密結果を一度だけ丸める任意精度モデル。
  • Berkeley SoftFloat/TestFloat 3e:IEEE の結果ビットと例外フラグを独立に 生成する参照実装・ベクトル。

数学的意味論とアルゴリズム

有限非ゼロ値は次の dyadic 実数を表します。

(-1)^negative * coefficient * 2^exponent2coefficient は非負の BinCoeff

非ゼロ coefficient から 2 の因子を除去して正規化しますが、+0-0 は 統合しません。無限大、qNaN、sNaN、NaN の符号と payload は明示的な状態です。

add_ctxsub_ctxmul_ctxdiv_ctxsqrt_ctxpow_int_ctx は、IEEE 特殊値を先に解決し、dyadic/有理数または平方根の境界で厳密な数学結果を求め、 目標精度・方向で一回だけ丸め、最後に指数範囲/subnormal の量子化と五つの IEEE フラグを導出します。テスト ID やテスト値に基づく分岐はありません。

binary16 の 0x0400 * 0x3BFF0x0400 になりますが、 inexact | underflow です。after-rounding tininess は最終 normal encoding では なく、目標精度で丸めた無界指数の結果から判定します。

固定コーパスと結果

完全ゲートは testdata/bin_float/README.md に定義します。

ソース範囲結果
TestFloat 3e level 1、seed 14 format × 5 operation × 5 rounding × 2 tininess7,461,360 / 7,461,360
MPFR 4.2.2 tests/data/sqrt実行可能な 16 進 sqrt 行すべて1,055 / 1,055
MPFR 4.2.2 pow_si fixture4 precision × 5 supported rounding × 6 input120 / 120
MPFR 4.2.2 elementary fixture29 operation × 3 precision × 6 rounding × 4 fixed-seed input2,088 / 2,088
optional MPFR elementary stress、seed 20260715three-operation 以上の各 family で 100,000 case 以上966,744 / 966,744
コミット済み smokeTestFloat、sqrt、pow_si、elementary witness2,271 / 2,271
TestFloat 3e level 2binary16 の全 declared operation/direction/tininess50,205,600 / 50,205,600

binary16 level-2 の結果は追加の streaming stress evidence であり、より大きい binary32/64/128 level-2 corpus を完了済みと主張するものではありません。NaN 以外では encoding bit と exception bit を厳密に比較します。期待値が NaN の 場合だけ quiet-NaN class と exception bit を比較します。IEEE 754 では新規に 生成される NaN payload の選択が許されるためです。実装は選択した入力 NaN の 符号/payload を保持し、sNaN を quiet にします。--level 2 は行を捨てない 有界 chunk で実行できますが、巨大な任意 stress corpus であり、上記の有限 ゲート結果には含めません。 同様に 966,744-row MPFR run は optional generated stress evidence です。再現可能な release boundary は hash-pinned 2,088-row fixture のままです。

主張の境界

Evidence の安定性

固定 matrix が release evidence の境界です。新しい operation には新しい corpus contract と oracle が必要です。

Evidence の記録

各 gate は format、rounding、tininess、encoded result、exception bits を summary に残し、再検証できます。

four interchange format の contextual add/sub/mul/div/sqrt に加え、24、53、 113 bit と六つの project rounding mode における 29 elementary operation を 検証します。全 IEEE 754 operation または全実数入力の適合性は主張しません。 nearest-away は MPFR が要求する mpfr_round_nearest_away_begin/end protocol で 生成し、禁止されている MPFR_RNDNA を general elementary function に直接 渡しません。

日常の確認は just conformance smoke binary、固定 full gate は just gate binary を実行します。