bookmark_border[PHP] floatとdoubleは何が違うのか

結論

同じ。

どちらも倍精度浮動小数点数

PHPはC言語で作られています。PHPでdoubleまたはfloatと定義すると内部のC言語ではdoubleとして扱われます。

IEEE 754の倍精度浮動小数点数に沿った表現であるかは保証されておらず、それは実行するマシンに依存します。小数点の桁数が違うと説明する文献もありますがそれはJavaなど別の言語での仕様で、PHPでは同じです。

なぜdoubleとfloatがあるのか

変数の型を取得するgettype関数の公式ドキュメントには次のような説明があります。

"double" (歴史的な理由により float の場合は、"float" ではなく、 "double" が返されます)

PHP: gettype – Manual

(太字は本ブログ)

PHP 7.4.21 で gettype を実行したところ確かに double と返してきます。

print(gettype(1.23));
// double

しかし var_dumpfloat と述べます。

var_dump(1.23);
// float(1.23)

なにか事情がありそうです。

“歴史的な理由” とは何か

doubleとfloatが統一されていない理由、残念ながらはっきりしたことはわかりませんでしたが興味深い考察をしていらっしゃる方がいらっしゃいました。

お前は PHP の歴史的な理由の数を覚えているのか (49ページ目から)

当初PHPの開発チームは浮動小数点数をdoubleとしていたものの、途中からfloatへの置き換えが始まった履歴(git)が取り上げられています。float, doubleどちらにするのかチームで方針の不一致と見られる履歴もご指摘あり。

これらが「歴史的理由」の背景と考えられます。

カテゴリー: PHP