ホームページ  >  記事  >  バックエンド開発  >  浮動小数点数の比較について、マニュアルではよくわかりませんでした。

浮動小数点数の比較について、マニュアルではよくわかりませんでした。

WBOY
WBOYオリジナル
2016-06-13 12:22:20972ブラウズ

浮動小数点数の比較について、マニュアルではよく分かりませんでした;
$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 />

コンピュータに保存されたときは同じだったことが判明
00000000 00000000 10000000 00111111
00000000 00000000 10000000 11

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。