摘要:返回是,這是為什么呢我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的在的新規(guī)范加入了一個新的東西是在對象上面,新增一個極小的常量。根據(jù)規(guī)格,它表示與大于的最小浮點數(shù)之間的差。上面的代碼為浮點數(shù)運算,部署了一個誤差檢查函數(shù)。
0.1+0.2 === 0.3 //返回是false, 這是為什么呢??
我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的:
0.1 + 0.2 = 0.30000000000000004
0.1 + 0.2 - 0.3 = 5.551115123125783e-17
5.551115123125783e-17.toFixed(20) = "0.00000000000000005551"
在JavaScript的新規(guī)范ES6加入了一個新的東西-->Number.EPSILONNumber.EPSILON是在Number對象上面,新增一個極小的常量。根據(jù)規(guī)格,它表示 1 與大于 1 的最小浮點數(shù)之間的差。
對于 64 位浮點數(shù)(double)來說,大于 1 的最小浮點數(shù)相當于二進制的 1.00..001 ,小數(shù)點后面有連續(xù) 51 個零。這個值減去 1 之后,就等于 2 的-52 次方。
Number.EPSILON 實際上是 JavaScript 能夠表示的最小精度。誤差如果小于這個值,就可以認為已經沒有意義了,即不存在誤差了。
引入一個這么小的量的目的,在于為浮點數(shù)計算,設置一個誤差范圍。
好了,我們來解決上面的浮點數(shù)計算的問題:Number.EPSILON 可以用來設置“能夠接受的誤差范圍”。比如,誤差范圍設為 2 的-50 次方(即 Number.EPSILON * Math.pow(2, 2) ),即如果兩個浮點數(shù)的差小于這個值,我們就認為這兩個浮點數(shù)相等。
5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2) // true
因此, Number.EPSILON 的實質是一個可以接受的最小誤差范圍。
function withinErrorMargin (left, right) { return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2); }
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true
上面的代碼為浮點數(shù)運算,部署了一個誤差檢查函數(shù)。
文章引用自ES6標準。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98934.html
摘要:按照的數(shù)字格式,整數(shù)有的范圍是,而且只能表示有限個浮點數(shù),能表示的個數(shù)為個。 0.1+0.2 等于0.3嗎?相信拿著這條題目隨便問一個高年級的小學生,他們都會毫不猶豫都回答:相等。是的,相等是正常的,這是常識。但是都說實踐是檢驗真理的唯一標準,拿這道簡單的算術題用javascript在chrome控制臺試驗一下: 結果令人大跌眼鏡,在控制臺輸入0.1+0.2 == 0.3返回的結果竟然...
摘要:因此利用以及語法樹在代碼構建過程中重寫等符號,開發(fā)時直接以這樣的形式編寫代碼,在構建過程中編譯成,從而在開發(fā)人員無感知的情況下解決計算失精的問題,提升代碼的可讀性。 前言 你了解過0.1+0.2到底等于多少嗎?那0.1+0.7,0.8-0.2呢? 類似于這種問題現(xiàn)在已經有了很多的解決方案,無論引入外部庫或者是自己定義計算函數(shù)最終的目的都是利用函數(shù)去代替計算。例如一個漲跌幅百分比的一個...
摘要:由于浮點數(shù)不是精確的值,所以涉及小數(shù)的比較和運算要特別小心。根據(jù)標準,位浮點數(shù)的指數(shù)部分的長度是個二進制位,意味著指數(shù)部分的最大值是的次方減。也就是說,位浮點數(shù)的指數(shù)部分的值最大為。 一 前言 這篇文章主要解決以下三個問題: 問題1:浮點數(shù)計算精確度的問題 0.1 + 0.2; //0.30000000000000004 0.1 + 0.2 === 0.3; // ...
摘要:本文通過介紹的二進制存儲標準來理解浮點數(shù)運算精度問題,和理解對象的等屬性值是如何取值的,最后介紹了一些常用的浮點數(shù)精度運算解決方案。浮點數(shù)精度運算解決方案關于浮點數(shù)運算精度丟失的問題,不同場景可以有不同的解決方案。 本文由云+社區(qū)發(fā)表 相信大家在平常的 JavaScript 開發(fā)中,都有遇到過浮點數(shù)運算精度誤差的問題,比如 console.log(0.1+0.2===0.3)// fa...
閱讀 2021·2021-09-30 09:53
閱讀 1860·2021-09-24 09:48
閱讀 1768·2019-08-30 14:01
閱讀 2180·2019-08-29 18:35
閱讀 1259·2019-08-26 18:27
閱讀 2993·2019-08-26 12:12
閱讀 960·2019-08-23 17:16
閱讀 954·2019-08-23 15:31