Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

intをdoubleに保存する恐怖の実装

doubleにintを格納できるかという問は,時と場合によって答えが異なる. doubleは倍精度浮動小数点型で,データサイズは64bitの仮数部52bitである. なので32bitの整数も格納できる. 問題はintが64bitの場合である.

intが64bitとなるのは,処理系がILP64の時である. したがってILP64でintをdoubleに放り込むと,データが壊れてしまう. しかしILP64を使った実装は,ごく僅からしい.
データ型モデル ‐ 通信用語の基礎知識

intをdoubleに格納するバカな実装があるかというと,実際にあった. 先日紹介した記事QJsonValueは,数値を扱うときに内部でdoubleとして保持する. ILP64の処理系が少ないと仮定しての実装だろうが,ILP64で動かすとトラブルのもととなるのが目に見えてわかる.