欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
2.55乘100,結果竟不是255!


很久以前,準確點(diǎn)說(shuō)應該是4年前的一個(gè)下午,程序員成心文同學(xué)遇到了他編程史上的第一個(gè)浮點(diǎn)數誤差bug,這個(gè)bug正如標題所述,在他的程序下2.55*100的結果竟是254.99999999999997,而非255。因為是初次遇到,所以他也不知道是怎么回事,但在請教中外倆.NET大牛無(wú)果后,他果斷拍板決定“自己動(dòng)手,豐衣足食”。


后來(lái)他終于找到了原因,簡(jiǎn)單地說(shuō):

計算機將小數部分0.55轉換成二進(jìn)制時(shí)會(huì )形成一個(gè)“0011”組合的無(wú)限循環(huán),從而造成誤差。解決辦法是盡量用decimal類(lèi)型替換double類(lèi)型。


這位年輕的程序員將他的這次編程經(jīng)歷記錄在了微博上,一不小心被小編扒了出來(lái),于是IT之家就有了這篇關(guān)于“世界上只有10種人,一種懂二進(jìn)制、另一種不懂”的文章。



當然,除了上面的這位同學(xué)這之外,小編還發(fā)現一位名叫周花卷的大牛也遇到了類(lèi)似的問(wèn)題,他在谷歌Chrome瀏覽器的開(kāi)發(fā)者控制臺(Win環(huán)境下F12/Mac環(huán)境按Command+Option+I可以打開(kāi)一個(gè)“開(kāi)發(fā)者工具”窗口,然后點(diǎn)上面的“Console”標簽,你會(huì )看到一個(gè)控制臺窗口)里輸入0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1”(一共10個(gè)0.1),按下回車(chē)后結果竟是0.99999999999999,這個(gè)問(wèn)題同樣也是二進(jìn)制造成的。



OK,下面進(jìn)入正題,小編接下來(lái)要用更專(zhuān)業(yè)的解釋來(lái)帶大家飛,不懂二進(jìn)制的也可以學(xué)習一下哈。


要搞清楚這個(gè)問(wèn)題,我們先來(lái)理解一下進(jìn)制的概念。在十進(jìn)制中,一位數字我們可以使用0到9,比9多的時(shí)候就會(huì )變成10,這就是一個(gè)兩位數了,也就是進(jìn)位了,二進(jìn)制也是一樣,只不過(guò)一位數字只能使用0和1,再多就要進(jìn)位了。那么進(jìn)制的本質(zhì)又是什么呢?我們隨便拿一個(gè)十進(jìn)制的數字來(lái)看一看:



看懂了沒(méi)?一個(gè)十進(jìn)制數實(shí)際上就是其中每一位數依次乘以10的0、1、2…次冪(權重),然后再把結果加起來(lái),那么以此類(lèi)推,二進(jìn)制里面就是把上面的10換成2唄?我們來(lái)看一個(gè):



于是二進(jìn)制數1001也就是十進(jìn)制數的9。到這里似乎還沒(méi)什么問(wèn)題,因為我們只討論了整數呢,每一個(gè)十進(jìn)制整數都可以轉換成一個(gè)二進(jìn)制整數,反過(guò)來(lái),每一個(gè)二進(jìn)制整數也都可以轉換成一個(gè)十進(jìn)制整數。不過(guò),如果把小數也加進(jìn)來(lái)呢?先看一個(gè)十進(jìn)制的小數:



看懂了沒(méi)?其實(shí)就是把10上面的指數變成了負數而已,不難吧。那么以此類(lèi)推,二進(jìn)制的小數也就是把10換成2唄,我們來(lái)看一個(gè):



上面我們理解了進(jìn)制的一些本質(zhì)特性,算不過(guò)來(lái)也沒(méi)關(guān)系,我們暫且先不管它,不過(guò),這跟我們遇到的問(wèn)題到底有什么關(guān)系?別急,我們再看一下當引入小數之后,進(jìn)制之間的轉換到底出了什么bug。我們知道實(shí)數的數軸是連續的,每?jì)蓚€(gè)數字之間的部分是可以被無(wú)限分割的,舉個(gè)例子,0和1之間的這部分,如果用十進(jìn)制一位小數來(lái)分割的話(huà),可以分成10份,也就是0.1、0.2、0.3……0.9、1,如果用二進(jìn)制一位小數來(lái)分割的話(huà),則只能分成兩份,也就是0.1(十進(jìn)制的0.5)、1。你發(fā)現了什么問(wèn)題?無(wú)論小數點(diǎn)后面增加多少位數字,二進(jìn)制永遠只能以2來(lái)分割數軸,而十進(jìn)制則是以10來(lái)分割數軸。


讓我們回想一下小學(xué)的數學(xué)知識,在十進(jìn)制中,如果要用有限小數來(lái)表示一個(gè)分數的值,那么這個(gè)分數的分母(化簡(jiǎn)之后)一定不能包含除了2和5以外的其他質(zhì)因數,因為十進(jìn)制以10來(lái)分割數軸,而10分解質(zhì)因數的結果為2×5。舉個(gè)例子:1/8、1/10、1/25都可以換算成有限小數(分別是0.125、0.1、0.04),因為這些分數的分母分解質(zhì)因數之后只包含2或者5(8=2×2×2、10=2×5、25=5×5),而當分母包含其他質(zhì)因數時(shí),例如1/3、1/7、1/18這些則無(wú)法用有限小數來(lái)表示(也就是俗話(huà)說(shuō)的“除不盡”)。如果我們把這個(gè)規律套用到二進(jìn)制上會(huì )怎么樣呢?2本身就是一個(gè)質(zhì)數,無(wú)法分解質(zhì)因數了,因此在二進(jìn)制中,如果要用有限小數來(lái)表示一個(gè)分數的值,那么這個(gè)分數的分母一定只能包含2這一個(gè)質(zhì)因數,換句話(huà)說(shuō),分母必須為2的冪(2、4、8、16、32……)。


好了,我們回頭看看開(kāi)頭的題目,0.1換算成分數就是1/10,而1/10的分母是10,10并不是2的冪,因此,在二進(jìn)制中并不能用有限小數來(lái)表示1/10這個(gè)值。事實(shí)上,如果將0.1轉換成二進(jìn)制,我們會(huì )得到一個(gè)無(wú)限循環(huán)小數:0.000110011001100……看到這里,很多人估計已經(jīng)想明白了,沒(méi)錯,計算機的精度是有限的,并不能直接處理無(wú)限小數,對于無(wú)限小數必須要截短到某個(gè)位置把它變成有限小數,但截短之后這個(gè)數就不準了,必然就產(chǎn)生了一點(diǎn)誤差,而連續加10次會(huì )將這種誤差放大,當誤差被放大到一定程度時(shí),計算的結果就會(huì )出問(wèn)題了,于是我們就看到了開(kāi)頭的那一幕。如果用十進(jìn)制來(lái)類(lèi)比的話(huà),大家可以想象一下,1/3+1/3+1/3=1,但1/3只能用無(wú)限循環(huán)小數來(lái)表示,即0.333333……,如果我們將它截短到某一位,假設截到0.333,那么0.333+0.333+0.333=0.999,你看,同樣也會(huì )出問(wèn)題。


問(wèn)題的原因總算搞清楚了,不過(guò)感覺(jué)很坑爹啊,計算機居然算不準小數,但為什么平時(shí)大家很少因此遇到問(wèn)題呢?那是因為大多數用戶(hù)都不用編寫(xiě)程序,但對于整天編寫(xiě)程序的程序員來(lái)說(shuō),這樣的問(wèn)題其實(shí)經(jīng)常遇到。比如說(shuō),如果你在一段程序中需要讓計算機判斷0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1是否等于1,計算機會(huì )告訴你不等于1,坑爹吧?如果這段程序涉及到算錢(qián),有時(shí)候就會(huì )錯得很離譜,因此有經(jīng)驗的程序員在碰到小數計算的時(shí)候都會(huì )特別小心。當然,作為一般用戶(hù)我們平時(shí)根本不需要關(guān)心這樣的問(wèn)題,不過(guò)計算機居然會(huì )算錯數,怎么想都覺(jué)得挺奇妙的吧?



長(cháng)按圖片并識別二維碼也可關(guān)注我們


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
浮點(diǎn)數計算異常原因(轉)
分數和小數的互化3
【五年級】分數與小數
小學(xué)生數學(xué)必背公式定理?(2)
分數加減法必背概念知識點(diǎn)整理
五年級數學(xué):分數與小數的互化問(wèn)題
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久