整数除算を浮動小数点に移行するのは簡単だ

Moving integer division to floating-point is trivial

整数除算と剰余演算はハードウェア上で遅く、レイテンシが長くスループットも低い。一方、浮動小数点除算は高速で、実行ユニットも多い。そこで、整数除算を浮動小数点演算に置き換える手法が提案されている。符号付き・符号なしの整数が倍精度なら53ビット、単精度なら24ビットに収まる場合、`trunc(x/y)`と`fma`を使えば整数除算と剰余を正確に計算できる。これは標準の丸めモード(最近接偶数丸め)で機能し、タイブレークが発生しないことが数学的に保証されている。SIMDでの利用や、除数の再利用が少ない場合に有効で、定数除数ではコンパイラが最適化する。

私の主張は、53/24ビットに収まる整数xとy(符号付きまたは符号なし)を浮動小数点に変換すれば、標準の丸めモードでd = trunc(x/y) と m = -fma(d,y,-x) が整数除算と剰余に一致するということです。

同じ日のその他の記事

2026-08-14