第3章 演算子 / 第3回 模擬試験

PHPの浮動小数点数に関する次の記述のうち、正しいものはどれか。

浮動小数点数の演算は、常に完全に正確な結果を返す。
`0.1 + 0.2 === 0.3`は、PHPでは常に`true`になる。
浮動小数点数を比較する際は、誤差を考慮した比較方法が推奨される。 正解
浮動小数点数はPHPでは整数型に自動的に丸められる。
解説
浮動小数点数(`float`)はコンピュータ内部では2進数の近似値として表現されるため、10進数の小数を正確に表せない場合があり、演算結果にわずかな誤差が生じることがあります。そのため、浮動小数点数同士を`===`や`==`で直接比較するのは避け、差の絶対値が十分小さいかどうかで判定する方法が推奨されます。 他の選択肢が誤りである理由は次の通りです。 ・浮動小数点数の演算は、上記の理由から「常に完全に正確」とは限りません。 ・`0.1 + 0.2`は内部的に`0.30000000000000004...`のような値になるため、`0.1 + 0.2 === 0.3`はPHPでは`false`になります。 ・浮動小数点数はPHPで独立した型(`float`)として扱われ、代入や演算で勝手に整数型に丸められることはありません(明示的にキャストした場合を除く)。 例: ``` var_dump(0.1 + 0.2 === 0.3); // false var_dump(abs((0.1 + 0.2) - 0.3) < PHP_FLOAT_EPSILON); // true(誤差を考慮した比較) ``` (参照: 独習PHP 第4版 第3章 演算子 3.1.4節 浮動小数点数の演算に注意 p.92)