関連記事
PHPマニュアル要点まとめ#9「型:浮動小数点数」
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
※この記事はPHPマニュアルの解説です。
浮動小数点数【要点まとめ】
言語リファレンス > 型 >「浮動小数点数」の解説です。
マニュアルページを見ながらご覧ください。
PHPでは、浮動小数点数型は「float」または「double」と呼ばれます。
小数値や、指数表記の値を格納することができます。
PHP7.4.0以降では、数値を見やすいようにアンダースコアで区切ることもできるようになりました。
小数点を含まない形式、小数点を含む形式、指数表記の形式、これらを扱うことができるデータ型です。
格納できるデータのサイズは、プログラムを動作させるプラットフォームに依存します。
通常は、最大値は「1.8x10の308乗(308は10の右上に小さい字で表示)」で、10進数で14桁程度の精度があります。
浮動小数点数は、膨大な桁数のデータを扱うことができますが、数値の精度に誤差が生じる場合があります。
これは、コンピューターが内部的に数値を二進数に変換する際、無限に続く値の「丸め処理」を行う必要があり、それによって数値表現に多少の誤差が生まれてしまうことが原因です。
例えば、0.1+0.7x10の切り捨て処理(floor)を行った場合、普通に考えると0.8x10=8の切り捨ては「8」となるはずですが、結果は「7」と表示されてしまいます。
これは、切り捨て前の数値が、内部的に「7.9999999999999991118... 」のような数値になっているからです。
そのため、正確な計算や、小数同士の比較などを行ってはいけません。
精度の高い計算を行いたい場合は、任意精度数学関数やgmp関数を使用するようにします。
また、浮動小数点数の精度については、こちらのページにも説明が記載されています。
文字列から、floatに変換を行う場合、その文字列が数値形式の文字列なら、その数値として変換が行われます。
数値形式以外の場合は、0に変換されます。
文字列以外の型から、floatに変換を行う場合は、まずint型に変換された後、float型に変換されます。
各型がint型にどのように変換されるのかについては、前回の記事をご参照ください。
先ほどもあったように、小数同士を比較することには問題があります。
数値を内部的に表現する際に、誤差が発生してしまうからです。
ただし、コンピュータが計算時に扱える最小の値(計算機イプシロン)よりも大きな値で比較を行う分には、正しく比較を行うことができます。
計算の結果、数値として表現できない値になった場合は「NaN」として表されます。
NaNは、他の値やNaN同士を比較した場合も結果はfalseとなるため、NaNを比較に使用してはいけません。
NaNかどうかをチェックするには「is_nan()」関数を使います。
ということで、今回は言語リファレンスの中から「型:浮動小数点数」を読み進めました。
また次回、この続きから読み進めていきましょう!