成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > php精度計(jì)算的問題解析

php精度計(jì)算的問題解析

熱門標(biāo)簽:百度地圖怎樣標(biāo)注圖標(biāo) 百度地圖標(biāo)注偏差 電銷機(jī)器人問門薩維品牌my 廣東廣州在怎么申請(qǐng)400電話 余姚電話機(jī)器人 外呼系統(tǒng)能給企業(yè)帶來哪些好處 400電話蘭州申請(qǐng)請(qǐng) 咸寧銷售電銷機(jī)器人系統(tǒng) 開發(fā)地圖標(biāo)注類網(wǎng)站

PHP

var_dump(intval(0.58 * 100));

正確結(jié)果是 57,而不是 58

浮點(diǎn)運(yùn)算惹的禍

其實(shí)這些結(jié)果都并非語言的 bug,但和語言的實(shí)現(xiàn)原理有關(guān), js 所有數(shù)字統(tǒng)一為 Number, 包括整形實(shí)際上全都是雙精度(double)類型。

而PHP會(huì)區(qū)分 int 還是 float。不管什么語言,只要涉及浮點(diǎn)運(yùn)算,都是存在類似的問題,使用時(shí)一定要注意。

說明:如果用php的+-*/計(jì)算浮點(diǎn)數(shù)的時(shí)候,可能會(huì)遇到一些計(jì)算結(jié)果錯(cuò)誤的問題,比如上面 的 echo intval( 0.58*100 );會(huì)打印57,而不是58,這個(gè)其實(shí)是計(jì)算機(jī)底層二進(jìn)制無法精確表示浮點(diǎn)數(shù)的一個(gè)bug,是跨語言的,我用python也遇到這個(gè)問題。所以基本上大部 分語言都提供了精準(zhǔn)計(jì)算的類庫或函數(shù)庫,比如php有BC高精確度函數(shù)庫,稍后我紹一下一些常用的BC高精確度函數(shù)使用。

還是回到上面的57,58問題。

為啥輸出是57啊? PHP的bug么?

要搞明白這個(gè)原因, 首先我們要知道浮點(diǎn)數(shù)的表示(IEEE 754):

  • 浮點(diǎn)數(shù), 以64位的長(zhǎng)度(雙精度)為例, 會(huì)采用1位符號(hào)位(E), 11指數(shù)位(Q), 52位尾數(shù)(M)表示(一共64位).
  • 符號(hào)位:最高位表示數(shù)據(jù)的正負(fù),0表示正數(shù),1表示負(fù)數(shù)。
  • 指數(shù)位:表示數(shù)據(jù)以2為底的冪,指數(shù)采用偏移碼表示
  • 數(shù):表示數(shù)據(jù)小數(shù)點(diǎn)后的有效數(shù)字.

這里的關(guān)鍵點(diǎn)就在于, 小數(shù)在二進(jìn)制的表示, 關(guān)于小數(shù)如何用二進(jìn)制表示, 大家可以百度一下, 我這里就不再贅述, 我們關(guān)鍵的要了解, 0.58 對(duì)于二進(jìn)制表示來說, 是無限長(zhǎng)的值(下面的數(shù)字省掉了隱含的1)..

0.58的二進(jìn)制表示基本上(52位)是: 00101000111101011100001010001111010111000010100011110.57的二進(jìn)制表示基本上(52位)是: 001000111101011100001010001111010111000010100011110而兩者的二進(jìn)制, 如果只是通過這52位計(jì)算的話,分別是:www.jb51.net

0.58 -> 0.579999999999999960.57 -> 0.5699999999999999至于0.58 * 100的具體浮點(diǎn)數(shù)乘法, 我們不考慮那么細(xì), 有興趣的可以看(Floating point), 我們就模糊的以心算來看… 0.58 * 100 = 57.999999999

那你intval一下, 自然就是57了….

可見, 這個(gè)問題的關(guān)鍵點(diǎn)就是: “你看似有窮的小數(shù), 在計(jì)算機(jī)的二進(jìn)制表示里卻是無窮的”

因此, 不要再以為這是PHP的bug了, 這就是這樣的…..

PHP浮點(diǎn)型在進(jìn)行+-*%/存在不準(zhǔn)確的問題

繼續(xù)看一段代碼:

$a = 0.1;
$b = 0.7;
var_dump(($a + $b) == 0.8); // false

打印出來的值為 boolean false

這是為啥?PHP手冊(cè)對(duì)于浮點(diǎn)數(shù)有以下警告信息:

Warning

浮點(diǎn)數(shù)精度

顯然簡(jiǎn)單的十進(jìn)制分?jǐn)?shù)如同 0.1 或 0.7 不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式。這就會(huì)造成混亂的結(jié)果:例如,floor((0.1+0.7)*10) 通常會(huì)返回 7 而不是預(yù)期中的 8,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似 7.9999999999…。

這和一個(gè)事實(shí)有關(guān),那就是不可能精確的用有限位數(shù)表達(dá)某些十進(jìn)制分?jǐn)?shù)。例如,十進(jìn)制的 1/3 變成了 0.3333333. . .。

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

那么上面的算式我們應(yīng)該改寫為

$a = 0.1;
$b = 0.7;
var_dump(bcadd($a,$b,2) == 0.8); // true

常用的高精度函數(shù)如下:

  • bcadd — 將兩個(gè)高精度數(shù)字相加
  • bccomp — 比較兩個(gè)高精度數(shù)字,返回-1, 0, 1
  • bcdiv — 將兩個(gè)高精度數(shù)字相除
  • bcmod — 求高精度數(shù)字余數(shù)
  • bcmul — 將兩個(gè)高精度數(shù)字相乘
  • bcpow — 求高精度數(shù)字乘方
  • bcpowmod — 求高精度數(shù)字乘方求模,數(shù)論里非常常用
  • bcscale — 配置默認(rèn)小數(shù)點(diǎn)位數(shù),相當(dāng)于就是Linux bc中的”scale=”
  • bcsqrt — 求高精度數(shù)字平方根
  • bcsub — 將兩個(gè)高精度數(shù)字相減

BC高精確度函數(shù)庫包含了:相加,比較,相除,相減,求余,相乘,n次方,配置默認(rèn)小數(shù)點(diǎn)數(shù)目,求平方。這些函數(shù)在涉及到有關(guān)金錢計(jì)算時(shí)比較有用,比如電商的價(jià)格計(jì)算。

/**
* 兩個(gè)高精度數(shù)比較
* 
* @access global
* @param float $left
* @param float $right
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return int $left==$right 返回 0 | $left$right 返回 -1 | $left>$right 返回 1
*/
var_dump(bccomp($left=4.45, $right=5.54, 2));
// -1
/**
* 兩個(gè)高精度數(shù)相加
* 
* @access global
* @param float $left
* @param float $right
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return string 
*/
var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));
//1.05
/**
* 兩個(gè)高精度數(shù)相減
* 
* @access global
* @param float $left
* @param float $right
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return string 
*/
var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));
//-1.98
/**
* 兩個(gè)高精度數(shù)相除
* 
* @access global
* @param float $left
* @param float $right
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return string 
*/
var_dump(bcdiv($left=6, $right=5, 2));
//1.20
/**
* 兩個(gè)高精度數(shù)相乘
* 
* @access global
* @param float $left
* @param float $right
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return string 
*/
var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2));
//7.71
/**
* 設(shè)置bc函數(shù)的小數(shù)點(diǎn)位數(shù)
* 
* @access global
* @param int $scale 精確到的小數(shù)點(diǎn)位數(shù)
* 
* @return void 
*/ 
bcscale(3);
var_dump(bcdiv('105', '6.55957')); 
//php7.1 16

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • PHP常見數(shù)學(xué)函數(shù)及BC高精度數(shù)學(xué)函數(shù)用法示例
  • PHP浮點(diǎn)數(shù)精度問題匯總

標(biāo)簽:臨沂 十堰 麗江 衡陽 鷹潭 重慶 銅陵 巴彥淖爾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php精度計(jì)算的問題解析》,本文關(guān)鍵詞  php,精度,計(jì)算,的,問題,解析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php精度計(jì)算的問題解析》相關(guān)的同類信息!
  • 本頁收集關(guān)于php精度計(jì)算的問題解析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    av影音资源| 精品国产一区二区亚洲人成毛片| 成人在线观看黄色| 看片网址国产福利av中文字幕| 免费麻豆国产一区二区三区四区| 亚洲欧洲综合在线| 国产精品实拍| 欧美精品一区二区成人| 中文字幕55页| 涩涩屋成人免费视频软件| 亚洲图片欧美日韩| 狠狠人妻久久久久久综合蜜桃| 麻豆av一区二区三区久久| 日韩美女写真福利在线观看| 中文字幕 国产精品| www.4hu95.com四虎| 在线国产三级| 国产精品久久久久av蜜臀| 91国模大尺度私拍在线视频| 亚洲精品视频二区| 先锋欧美三级| 亚洲无限av看| www.久久国产| 国产成人一区三区| 最新国产露脸在线观看| 亚洲bbw性色大片| 精品国产精品国产精品| 日韩第一页在线观看| 日韩黄色网址| 亚洲av成人无码一二三在线观看| 男插女视频网站| 金瓶狂野欧美性猛交xxxx| 亚洲色婷婷久久精品av蜜桃| av观看在线| 色综合久久99| 交换做爰国语对白| 亚洲欧美另类在线视频| 欧美xxxx老人做受| 亚洲www视频| 夜夜精品浪潮av一区二区三区| 91视频com| 99视频有精品高清视频| 在线观看视频一区二区| 国产成人无码一区二区在线观看| 国产亚洲精品久| 麻豆av在线播放| 国产精品亚洲综合一区在线观看| 亚洲成在人线免费| 中文国产在线观看| 青草伊人久久| 亚洲最大激情网| 国产在线精品一区二区| eeuss影影院www在线播放| 99re在线视频精品| 国产成人精品久久亚洲高清不卡| 成人免费淫片视频软件| 乱老熟女一区二区三区| 欧美成在线视频| 色噜噜国产精品视频一区二区| 免费在线黄色网址| 激情久久久久久久| 欧美第一精品| 色婷婷**av毛片一区| www.日本久久久久com.| 亚洲麻豆视频| 欧美亚洲国产成人精品| 91看片免费版| 神马影院午夜我不卡影院| 三区在线观看| 日韩欧美三级视频| 国产美女一区二区| 日本一区二区三区视频视频| 欧美xxxx少妇| 欧美丝袜自拍制服另类| 成人午夜在线影院| 欧美精品在线一区二区三区| 免费一级全黄少妇性色生活片| 永久免费无码av网站在线观看| 理论片鲁丝二区爱情网| 午夜av一区二区三区| 欧美日韩中文字幕一区二区三区| 黄色xxxx| 微拍福利一区二区| 91网址在线观看| 日韩av最新在线| 黄页网址在线观看| 日韩电影在线观看电影| 久草网站在线观看| 欧美日韩国产一二三区| 国内在线视频| 在线观看91精品国产麻豆| 555www色欧美视频| 日韩高清中文字幕一区二区| 日本日本精品二区免费| 久热久精久品这里在线观看| 九一国产在线观看| 中文字幕一区二区三区久久网站| 亚洲AV无码精品自拍| 亚洲色婷婷综合开心网| 91大神网址| 偷窥国产亚洲免费视频| 成人三级高清视频在线看| 无码人妻精品一区二区三区99不卡| 久久久久久久久久久久久久久久久久久久| 毛片在线免费| 亚洲欧洲高清| 午夜写真片福利电影网| 国产成人精彩在线视频九色| 日本精品性网站在线观看| 欧美妇性猛交视频| 日韩精品视频一区二区在线观看| www.毛片.com| 色婷婷狠狠五月综合天色拍| 91女人18毛片水多国产| 国产欧美日韩麻豆91| 日韩亚洲在线| 国产精品视频500部| 免费黄色av网站| 欧美三级网站| 中文字幕av免费在线观看| 91丨九色丨国产在线| 午夜欧美精品久久久久久久| 免费一级欧美在线观看视频| 成人aaaa免费全部观看| 欧美疯狂做受xxxx高潮| 欧美日韩综合另类| 日韩电影一区二区三区四区| 国产一区二区三区久久久| 国产1区二区| 成人三级小说| 精品69视频一区二区三区| 亚洲国产激情av| 99免费视频| 国产成人在线视频免费观看| 国产精品久久波多野结衣| ts人妖另类在线| 国产三级视频在线播放线观看| 欧美日韩黄视频| www.jizz在线观看| 青草成人免费视频| 日韩一区二区三区资源| 怡红院在线播放| 婷婷婷国产在线视频| 一区二区三区少妇| 尤物网站在线| 中文字幕日韩有码| 日本久久网站| 亚洲一二三不卡| 欧美××××黑人××性爽| 国产成人精品免费一区二区| 亚洲1区在线观看| 久久久99精品免费观看| 蜜桃91麻豆精品一二三区| 美女一区二区久久| av网站在线免费看推荐| 91精品欧美久久久久久动漫| 91高跟黑色丝袜呻吟在线观看| 国产精品av免费观看| 黄色网址免费看| 四虎精品成人影院观看地址| 少妇献身老头系列| 欧美色网一区| 精品粉嫩超白一线天av| 精品一区免费av| 国产精品男女猛烈高潮激情| 国产女主播在线| 国产成人精品福利一区二区三区| 日韩欧美亚洲范冰冰与中字| 91免费的视频在线播放| 久草网视频在线观看| 亚洲资源网你懂的| 日韩成人综合网站| 国产色视频一区| 你懂的好爽在线观看| 色噜噜色狠狠狠狠狠综合色一| 日本va中文字幕| 最近2019中文免费高清视频观看www99| 天美星空大象mv在线观看视频| 久久久久国产精品一区| 全部免费的黄色毛片| 九九热视频精品| 国产精品青草综合久久久久99| а√在线中文在线新版| 久久久久久久久久亚洲| 欧美精品videofree1080p| 忘忧草在线日韩www影院| 国产色综合网| av手机免费观看| 小泽玛利亚一区二区三区视频| 中文字幕第一页在线视频| av成人国产| 免费a在线看| a级片在线免费看| 婷婷无套内射影院| 亚洲黄页视频免费观看| 日韩成人中文字幕在线观看| 美乳美女在线观看香蕉| 成人一级黄色大片| 国产精品一区二区婷婷| 天天做天天爱天天高潮| 欧美人与禽zoz0善交| 国产精品视频一区二区三区| 欧美男女性生活在线直播观看| 1313精品午夜理伦电影| 日本精品免费| 野外性满足hd| 国产精品国产三级国产专区53| 亚洲人视频在线| 伊人久久大香线蕉精品组织观看| 91美女片黄在线观看91美女| 国内揄拍国内精品| 国产综合内射日韩久| 91在线视频免费91| 97人妻精品一区二区三区动漫| 美女黄页在线观看| 香蕉视频在线网址| 麻豆国产入口在线观看免费| 牛夜精品久久久久久久99黑人| 真不卡电影网| 日韩vs国产vs欧美| 一本一道久久a久久综合蜜桃| 国内国产区免费视频| 电影一区二区三| 无码小电影在线观看网站免费| 91高跟黑色丝袜呻吟在线观看| 高清国语自产拍免费视频国产| 欧美精品18videosex性欧美| 婷婷亚洲五月| 中文字幕免费观看视频| 电影一区二区三区久久免费观看| 蜜臀av色欲a片无码精品一区| 国产大学生校花援交在线播放| 巨人精品**| eeuss影院95999部| 午夜欧洲一区| 天天干天天色天天干| 久久午夜鲁丝片| 中文字幕三级电影| 涩涩网站在线看| 日本乱人伦aⅴ精品| 国产精品久久久一区| 中文日本在线观看| 国产国产精品人在线视| 女人天堂在线视频| 日韩毛片在线视频| 成人欧美一区二区三区黑人孕妇| 欧美国产在线一区| 日本韩国在线视频爽| 亚洲欧美日韩国产成人| 国产aⅴ爽av久久久久成人| 四虎最新地址发布| 国产精品天干天干在观线| 蜜臀久久99精品久久久久久宅男| 触手亚洲一区二区三区| 日韩精品中午字幕| 熟女性饥渴一区二区三区| 亚洲看片免费| 人人在草线视频在线观看| 欧美中文字幕在线观看视频| 日韩精品网站| 精品国产av鲁一鲁一区| 亚洲xxxx天美| 深夜福利在线看| 蜜桃成人在线| 国产精品天美传媒入口| 91九色在线porn| 日韩欧美性视频| 久久久久久久久久久久久女过产乱| 五月花成人网| 91精品福利在线一区二区三区| 日韩女优在线观看| 欧美午夜性视频| 国产乱子伦视频一区二区三区| 久久99国产精品免费网站| 小泽玛利亚一区| 欧美性一级生活| 国产一区二区三区免费在线观看| 日韩毛片在线| 中文字幕乱码日本亚洲一区二区| 国产精久久一区二区三区| 在线成人福利| 91久久线看在观草草青青| 精品免费av在线| 国产精品天天摸av网| 91精品视频在线免费观看| 中文字幕av亚洲精品一部二部| 欧美极品另类videosde| 高潮毛片7777777毛片| 亚洲一区电影| 精品1卡二卡三卡四卡老狼| 99riav视频一区二区| 国产欧美亚洲精品a| 白丝女仆被免费网站| 精品久久久av| 天美一区二区三区| 成人在线免费看视频| 4438x成人网最大色成网站| 在线精品国产亚洲| 一级片avav网址| 偷拍自拍亚洲色图| 久久青草精品视频免费观看| 91麻豆精品国产91久久久久推荐资源| 顶级嫩模精品视频在线看| 91精品专区| 91一区在线| 91中文字幕在线| 日韩黄色av网站| 亚洲卡通欧美制服中文| 91亚洲永久免费精品| 男女啪啪免费视频网站| 日韩电视剧在线观看免费网站| 在线观看欧美视频| 福利一区福利二区微拍刺激| 黄色aa久久| 中文字幕九色91在线| 久久午夜a级毛片| 二区三区精品| 一本大道久久a久久精品| 亚洲精品国产91| 婷婷丁香花五月天| 2018中文字幕一区二区三区| 高清av中文在线字幕观看1| 国产成人综合久久| 成人免费直播| 性网站在线免费观看| 在线播放免费视频| 久久久久久久久久久人体| 欧美日韩国产大片|