男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

Float 浮點(diǎn)型

浮點(diǎn)型(也叫浮點(diǎn)數 float,雙精度數 double 或實(shí)數 real)可以用以下任一語(yǔ)法定義:

<?php
$a 
1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// 從 PHP 7.4.0 開(kāi)始支持
?>

浮點(diǎn)數的形式表示(PHP 7.4.0 之前不支持下劃線(xiàn)):

LNUM          [0-9]+(_[0-9]+)*
DNUM          ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})

浮點(diǎn)數的字長(cháng)和平臺相關(guān),盡管通常最大值是 1.8e308 并具有 14 位十進(jìn)制數字的精度(64 位 IEEE 格式)。

警告

浮點(diǎn)數的精度

浮點(diǎn)數的精度有限。盡管取決于系統,PHP 通常使用 IEEE 754 雙精度格式,則由于取整而導致的最大相對誤差為 1.11e-16。非基本數學(xué)運算可能會(huì )給出更大誤差,并且要考慮到進(jìn)行復合運算時(shí)的誤差傳遞。

此外,以十進(jìn)制能夠精確表示的有理數如 0.10.7,無(wú)論有多少尾數都不能被內部所使用的二進(jìn)制精確表示,因此不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉換為二進(jìn)制的格式。這就會(huì )造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會(huì )返回 7 而不是預期中的 8,因為該結果內部的表示其實(shí)是類(lèi)似 7.9999999999999991118...。

所以永遠不要相信浮點(diǎn)數結果精確到了最后一位,也永遠不要比較兩個(gè)浮點(diǎn)數是否相等。如果確實(shí)需要更高的精度,應該使用任意精度數學(xué)函數或者 gmp 函數。

參見(jiàn)? 浮點(diǎn)數指南網(wǎng)頁(yè)的簡(jiǎn)單解釋。

轉換為浮點(diǎn)數

從 string 轉換

如果 string 是 numeric 或者前導數字, 則將它解析為相應的 float 值,否則將轉換為零(0)。

從其他類(lèi)型轉換

對于其它類(lèi)型的值,其情況類(lèi)似于先將值轉換成 int,然后再轉換成 float。 請參閱“轉換為整型”一節以獲取更多信息。

注意:

某些類(lèi)型在轉換成 int 時(shí)有未定義行為,轉換為 float 時(shí)也會(huì )如此。

比較浮點(diǎn)數

如上述警告信息所言,由于內部表達方式的原因,比較兩個(gè)浮點(diǎn)數是否相等是有問(wèn)題的。不過(guò)還是有迂回的方法來(lái)比較浮點(diǎn)數值的。

要測試浮點(diǎn)數是否相等,要使用一個(gè)僅比該數值大一丁點(diǎn)的最小誤差值。該值也被稱(chēng)為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差別值。

$a$b 在小數點(diǎn)后五位精度內都是相等的。

<?php
$a 
1.23456789;
$b 1.23456780;
$epsilon 0.00001;

if(
abs($a-$b) < $epsilon) {
    echo 
"true";
}
?>

NaN

某些數學(xué)運算會(huì )產(chǎn)生一個(gè)由常量 NAN 所代表的結果。此結果代表著(zhù)一個(gè)在浮點(diǎn)數運算中未定義或不可表述的值。任何拿此值與其它任何值(除了 true)進(jìn)行的松散或嚴格比較的結果都是 false。

由于 NAN 代表著(zhù)任何不同值,不應拿 NAN 去和其它值進(jìn)行比較,包括其自身,應該用 is_nan() 來(lái)檢查。

男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站