關於 Math.sumPrecise()
前言
Math.sumPrecise() 看說明是為了解決連續加浮點數造成的誤差問題,但實際用起來似乎有些問題,在此把學習的過程做個紀錄。
內容
範例如下
console.log( Math.sumPrecise( [0.1, 0.2] ) );//0.30000000000000004 console.log( Math.sumPrecise( [0.1, 0.2, 0.3] ) );//0.6 console.log( Math.sumPrecise( [0.1, 0.2, 0.3, 0.4 ] ) );//1.0 // let ar1 = [0.1, 0.2]; let ar2 = [0.1, 0.2, 0.3]; let ar3 = [0.1, 0.2, 0.3, 0.4]; console.log( ar1.reduce((a, b) => a + b, 0) );0.30000000000000004 console.log( ar2.reduce((a, b) => a + b, 0) );0.6000000000000001 console.log( ar3.reduce((a, b) => a + b, 0) );1
Math.sumPrecise() 的用法很簡單,引數只支援輸入一個陣列,並不支援多個引數的輸入,透過回傳值取得加完後的結果,範例分別示範了三種狀況,但在第一個狀況就發生有精度的問題!而且這個狀況是符合規格的,在 [ developer.mozilla.org ] Math.sumPrecise() 有說這是合理的結果,所以使用 Math.sumPrecise() 還是有精度的問題要解決,算是只解決一半,最後範例分別把三種狀況使用直接加的方式呈現,可以跟開始的三個示範做比較。
感覺 Math.sumPrecise() 並不可靠,問題只解決一半,也許日後的版本會解決這個問題,現在還是不建議使用。
沒有留言:
張貼留言