IEEE754浮動小数点数の丸めに関するメモ

すごく重箱の隅っぽいことについてです。

計算結果が有限だがINFに丸められる場合

方向丸め(正の無限大への丸め)の場合、真の結果が正規化数で表せる最大数よりも大きい場合、+INFに丸められます。

最近接丸めの場合、真の結果がどんな数でも"無限大"の方が"近い"、とはならないはずです。 しかし、ゼロ除算ではない場合でも、オーバーフローして+INFに丸められることはあります。

規格書を読むと、以下のような動作をするということになっていました。

  • binary32(float)なら、+0x1.ffffffp+127以上の場合、+INFに丸める
  • binary64(double)なら、+0x1.fffffffffffff8p+1023以上の場合、+INFに丸める

つまり、正規化数で表せる最大数(floatなら0x1.fffffep+127、doubleなら0x1.fffffffffffffp+1023)の"次"に相当数する数(floatなら0x1.p+128、doubleなら0x1.p+1024)との中間が丸めるときの境界になっているようです。

ちなみに、最近接丸めには、"ties to even"(偶数丸め)と"ties to max magnitude"(日本語名称不明)の二つがありますが、いずれの場合でも境界ぴったりの場合、INFに丸められます。

偶数丸めの時、境界ぴったりの値が+INFに丸められることからも、なんだか"次"の数があたかも存在するかのように計算している感じが読み取れます。