$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
正規表現は次のとおりです:
浮動小数点数: [0-9]+
倍精度型: ([0-9][.]{LNUM}) ({LNUM}[.][0-9]*)
指数式: [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
=========================
関数 float_max($mul = 2, $affine = 1) {
$max = 1; $omax = 0;
While((string)$max != 'INF') { $omax = $max *= $mul;
for($i = 0; $i
$pmax = 1; $max = $omax;
$omax = $max;
$max += $pmax;
$pmax *= $mul;
}
}
$omax を返します;
}
echo "最大浮動小数点数:" ;var_dump(float_max());
?>
=========================
結果は次のとおりです (プラットフォームに応じて異なります):
最大浮動小数点数: float(1.79769313486E+308)
浮動小数点精度に関する注意:
たとえば、floor((0.1+0.7)*10) は、結果の内部表現が実際には 7.9 であるため、通常、期待される 8 ではなく 7 を返します。
有限の桁数で特定の小数を正確に表現することはまったく不可能です。
たとえば、10 進数の 1/3 は 0.3 になります。
それで
1.浮動小数点の結果が最後の桁まで正確であるとは決して信じないでください
2.また、2 つの浮動小数点数が等しいかどうかを比較しないでください。
3.本当に高い精度が必要な場合は、任意精度の数学関数または gmp 関数を使用する必要があります。
PHP 5 以降、オブジェクトを float に変換しようとすると、E_NOTICE エラーが発行されます。