PHP8.0で、2つのfloat型数値を使った除算(割り算)をする関数が追加されました。fdiv()。
PHP7ですでに追加されているintdiv()の小数点版です。結果も浮動小数点で返されます。
でも使い道が思いつかない。'/' の式で十分だし。
fdiv() はパラメータで指定した2つのfloat型で除算(割り算)を行います。
num1: 分子の値
num2: 分母の値
割り算なので分母に0は指定できません。エラーにはなりませんが、返される値が INF, -INF, NaN のいずれかになります。
(NaN は非数値の意味で数値としては無効値。INF, -INF はInfinity(無限大)のこと。)
PHP公式ドキュメント
なんでこんな結果になるかといえば、fdiv() は浮動小数点の表現形式で広く一般的に使われている、 IEEE 754 に準拠して計算しているから。
'/' ではいけないの?
『割り算を関数を使ってやる必要ある?』と思う人がほとんどでしょう。プログラミングでは '/' を使えばかんたんに割り算の式ができるから。
'/' でダメということはありません。ただし、分母が0になる可能性は押さえときましょう。
除算の式で分母が0になったらエラー例外が発生します。
Devisionは除算(割り算)のこと。除算の分母で0を使われたら困るという内容。
'/' でもうひとつ気をつけることは、IEEE 754 に準拠しているか分からないこと。
一般的な業務計算レベルでは問題ないですが、計算の精度が必要になってくるとちょっと不安です。
fdiv() の追加は intdiv() の存在が関係している?
そういうことも考えて fdiv() を追加したんじゃないかな?
ただ、そんな高度な精度が必要ならC++やJava, Pythonを使うし、ゴリゴリの科学技術計算ならFortranとかを使います。
PHPで必要だろうか? 個人的には '/' で事足りると思う。
ちなみに、PHP7で intdiv() という、整数同士の除算を行う関数が追加されたんですが、結果もint型で整数であるために小数点以下は切り捨てられます。
fdiv() を追加した一番の理由はこれなんじゃないだろうか?
『そんな中途半端な intdiv() なんてものを追加するくらいなら、小数点以下に対応した関数を用意せーっ!』という声が出るだろうことはかんたんに想像できるし。