第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

浮點(diǎn)數(shù)學(xué)是否破碎?

浮點(diǎn)數(shù)學(xué)是否破碎?

GCT1015 2019-05-20 14:54:34
請考慮以下代碼:0.1 + 0.2 == 0.3  ->  false0.1 + 0.2         ->  0.30000000000000004為什么會(huì)出現(xiàn)這些不準(zhǔn)確之處?
查看完整描述

9 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

當(dāng)您將.1或1/10轉(zhuǎn)換為基數(shù)2(二進(jìn)制)時(shí),您會(huì)在小數(shù)點(diǎn)后得到重復(fù)模式,就像嘗試在基數(shù)10中表示1/3一樣。該值不準(zhǔn)確,因此您無法做到使用普通浮點(diǎn)方法精確計(jì)算數(shù)學(xué)。


查看完整回答
反對 回復(fù) 2019-05-20
?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

這里的大多數(shù)答案都以非常干燥的技術(shù)術(shù)語來解決這個(gè)問題 我想以正常人能夠理解的方式來解決這個(gè)問題。

想象一下,你正在嘗試切片比薩餅。你有一個(gè)機(jī)器人比薩刀,可以削減比薩正好一半。它可以將整個(gè)披薩減半,或者它可以將現(xiàn)有切片減半,但無論如何,減半總是精確的。

那個(gè)披薩刀具有非常精細(xì)的動(dòng)作,如果你從整個(gè)披薩開始,然后將其減半,并且每次繼續(xù)將最小的切片減半,則可以在切片太小之前對其進(jìn)行減半53次,即使它的高精度能力也是如此。此時(shí),您不能再將那個(gè)非常薄的切片減半,但必須按原樣包含或排除它。

現(xiàn)在,你將如何將所有切片分成幾乎加上十分之一(0.1)或五分之一(0.2)的披薩?真的想一想,試試吧。如果您手邊有神話般的精密披薩刀,您甚至可以嘗試使用真正的披薩。:-)


大多數(shù)有經(jīng)驗(yàn)的程序員,當(dāng)然知道真正的答案,這是沒有辦法拼湊出一個(gè)確切的使用這些切片比薩餅的十分之一或五分之一,無論你如何精細(xì)切片他們。你可以做一個(gè)非常好的近似,如果你用近似值0.2加上0.1的近似值,你會(huì)得到0.3的近似值,但它仍然只是一個(gè)近似值。

對于雙精度數(shù)字(這是允許您將披薩減半53倍的精度),立即小于和大于0.1的數(shù)字是0.09999999999999999167332731531132594682276248931884765625和0.1000000000000000055511151231257827021181583404541015625。后者比前者更接近0.1,因此如果輸入為0.1,則數(shù)字解析器將支持后者。

(這兩個(gè)數(shù)字之間的差異是我們必須決定要包括的“最小切片”,它引入向上偏差,或排除,這會(huì)引入向下偏差。最小切片的技術(shù)術(shù)語是ulp。)

在0.2的情況下,數(shù)字都是相同的,只是按比例增加了2倍。再次,我們贊成略高于0.2的值。

請注意,在這兩種情況下,0.1和0.2的近似值略有向上偏差。如果我們添加足夠的這些偏差,它們會(huì)使數(shù)字越來越遠(yuǎn)離我們想要的數(shù)字,事實(shí)上,在0.1 + 0.2的情況下,偏差足夠高,結(jié)果數(shù)字不再是最接近的數(shù)字到0.3。

特別是,0.1 + 0.2實(shí)際上是0.1000000000000000055511151231257827021181583404541015625 + 0.200000000000000011102230246251565404236316680908203125 = 0.3000000000000000444089209850062616169452667236328125,而最接近0.3的數(shù)字實(shí)際上是0.299999999999999988897769753748434595763683319091796875。


PS一些編程語言還提供披薩切割器,可以將切片分成精確的十分之一。雖然這種披薩切割器并不常見,但是如果您確實(shí)可以使用它,那么當(dāng)重要的是能夠獲得切片的十分之一或五分之一時(shí),您應(yīng)該使用它。

(最初發(fā)布在Quora上。)


查看完整回答
反對 回復(fù) 2019-05-20
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

浮點(diǎn)舍入錯(cuò)誤。由于缺少素?cái)?shù)因子5,0.1不能在base-2中準(zhǔn)確地表示為基數(shù)為10.正如1/3采用無窮多位數(shù)來表示十進(jìn)制,但在base-3中為“0.1”, 0.1在base-2中占用無數(shù)個(gè)數(shù)字,而不是在base-10中。計(jì)算機(jī)沒有無限的內(nèi)存。


查看完整回答
反對 回復(fù) 2019-05-20
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

除了其他正確答案之外,您可能還需要考慮縮放值以避免浮點(diǎn)運(yùn)算問題。

例如:

var result = 1.0 + 2.0;     // result === 3.0 returns true

... 代替:

var result = 0.1 + 0.2;     // result === 0.3 returns false

表達(dá)式在JavaScript中0.1 + 0.2 === 0.3返回false,但幸運(yùn)的是浮點(diǎn)中的整數(shù)運(yùn)算是精確的,因此可以通過縮放來避免十進(jìn)制表示錯(cuò)誤。

作為一個(gè)實(shí)際的例子,為了避免精度至關(guān)重要的浮點(diǎn)問題,建議1處理貨幣作為整數(shù)代表分?jǐn)?shù):2550美分而不是25.50美元。


1 Douglas Crockford:JavaScript:好的部分:附錄A - 可怕的部分(第105頁)


查看完整回答
反對 回復(fù) 2019-05-20
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

我的解決方法:

function add(a, b, precision) {
    var x = Math.pow(10, precision || 2);
    return (Math.round(a * x) + Math.round(b * x)) / x;}

precision是指在添加期間小數(shù)點(diǎn)后要保留的位數(shù)。


查看完整回答
反對 回復(fù) 2019-05-20
  • 9 回答
  • 0 關(guān)注
  • 799 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)