2016-09-26 52 views
1

我想在我的應用程序中使用Number.EPSILON值,並想知道如何在不同的瀏覽器中支持這個值。 MDN states它支持Firefox和Chrome,但不支持IE和Safari。Number.EPSILON的Browsersupport?

我已經在IE11和Edge的控制檯中自己測試了它。邊緣給我如預期的2.220446049250313e-16,IE11給出undefined。我無法自己測試Safari。

  1. 是否有支持表顯示不同瀏覽器版本的支持?

  2. 我可以安全使用var eps = Number.EPSILON || 2.220446049250313e-16;作爲後備嗎?

回答

2

1)您可以在自己browserling嘗試,並在"https://jsfiddle.net/jz350gf1/1/"衝(不帶引號)。如果您看到紅色,則不支持。

該javascript代碼是document.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red';。例如,Vista上的IE9和Safari 5.1不支持它。

還有the MDN page for Number.EPSILON底部的兼容性表。目前,它聲稱只有Chrome,Firefox和(可能)Opera支持它。大於5.1的Safari版本可能支持它。雖然我沒有Mac來測試它。

在caniuse.com,here's其中功能由ES6引入。看起來像Safari的最新版本有充分的支持。我不確定它有多遠。當時和現在的版本是Safari的黑暗時代。 Opera可能畢竟不支持它?不,它支持它。

無論哪種方式,至於2)是的。常量是常量。雙精度浮點數的epsilon在所有語言中總是相同的。雖然您應該想要具體推導出價值,但根據this wiki page,您應該能夠以計算方式推導出它。 Here's a demonstration.

function getEpsilon() { 
 
    var e = 1.0; 
 
    while ((1.0 + 0.5 * e) !== 1.0) 
 
    e *= 0.5; 
 
    return e; 
 
} 
 

 
alert("And the epsilon is... "+getEpsilon());

所以,你可以做var eps = Number.EPSILON || getEpsilon();如果你想成爲超級pendantic有關可能使用的東西不到一個雙精度浮點數類型不符合要求的瀏覽器,但我相信沒有存在(我打開例外)。 :)

+0

很好的答案,非常感謝:) – Fidel90

+1

如果你更喜歡另一種技術上更精確(但實際上並非有用)的epsilon計算,它是再次計算的值減半('1.1102230246251565e-16' )。儘管如此,爲了將它與一個給定的值進行比較,你需要將它加倍(因爲舍入誤差是1位,而不是1位的1/2),並且在這個過程中使其毫無意義。這就解釋了維基頁面上的兩列。 ('b^{ - (p-1)}/2' vs.'b^{ - (p-1)}') – TylerY86

+0

Doh,halfed - > halfved。 – TylerY86

相關問題