浮動小数点数の比較について、マニュアルではよく分かりませんでした;
$a = 1.11;
$b = 1.11;
if($a==$b){
//結果は true ああ;
}
2 つの浮動小数点数が等しいかどうかを比較するべきではないと言いませんか?
それは正確にはどういう意味ですか?計算後の浮動小数点数は比較できないということですか?
------解決策----------------------
比較したくないわけではありませんが、精度上の理由から、「同じように見える 2 つの数値は比較すると等しくありません」を参照してください
もちろん、2 つの数値を比較しても問題はありません同じ精度で
-----ソリューションアイデア- ------------------------- -
比較できないわけではなく、不正確なだけです。
例:
<br />$a = 1.1000000000000000001;<br />$b = 1.1000000000000000011;<br /><br />if($a==$b){<br /> echo 'equal';<br />}else{<br /> echo 'not equal';<br />}<br />
$a = 1.00000000000000001;<br />$b = 1.00000000000000002;<br />var_dump($a == $b); //bool(true) 居然是相等的<br /><br />$s = pack('f', $a);<br />for($i=0; $i<strlen($s); $i++) printf(' %08b', ord($s{$i}));<br />echo PHP_EOL;<br /><br />$s = pack('f', $b);<br />for($i=0; $i<strlen($s); $i++) printf(' %08b', ord($s{$i}));<br />echo PHP_EOL;<br />