ホームページ >バックエンド開発 >PHPチュートリアル >浮動小数点数の比較に関しては、マニュアルでは明確に理解されていません。
$a = 1.11;
$b = 1.11;
if($a==$b){
//結果は true;
2 つの浮動小数点数を比較してはいけないと言いませんか?それらが等しいかどうかを確認してください
計算後の浮動小数点数は比較できないことはありますか?しかし、精度上の理由により、同じように見える 2 つの数値は、比較すると等しくありません
もちろん、同じ精度で 2 つの数値を比較する場合には問題はありません
$a = 1.1000000000000000001;$b = 1.1000000000000000011;if($a==$b){ echo 'equal';}else{ echo 'not equal';}
$a = 1.00000000000000001;$b = 1.00000000000000002;var_dump($a == $b); //bool(true) 居然是相等的$s = pack('f', $a);for($i=0; $i<strlen($s); $i++) printf(' %08b', ord($s{$i}));echo PHP_EOL;$s = pack('f', $b);for($i=0; $i<strlen($s); $i++) printf(' %08b', ord($s{$i}));echo PHP_EOL;
コンピュータに保存すると同じであることが判明
00000000 00000000 10000000 00111111
00000000 0000000 10000000 00111111