[英]Cross-browser consistency in JavaScript floating point arithmetic
我的目標是擁有一個百分度/弧度的翻譯工具。
var PI = 3.1415926535897936;
var PI_100 = 1.5707963267948968; // PI*0.5;
var PI_300 = 4.71238898038469; // PI*(1.5);
var D_PI = 6.283185307179587; // 2*pi
var centTo = 0.015707963267948967;
Chrome評估以下表達式,如下所示:
PI*2 == D_PI >>> true
PI*0.5 = PI_100 >>> true
PI*1.5 = PI_300 >>> true
100*centTo == PI_100 >>> true
300*centTo == PI_300 >>> true
這些表達式在每個瀏覽器上都是true
嗎?
或者我必須在比較時使用epsilon嗎?
var epsilon = 0.0000001;
Math.abs(a - b) < epsilon
除了檢查無窮大或NaN之外,使用與浮點數進行等效比較是不好的編程語言。 最好檢查並查看某個值是否在某個容差范圍內。
ECMAScript標准將“數值”(在技術上沒有單獨的整數類型)定義為“對應於IEEE 754值的雙精度64位二進制形式”。 這應該意味着行為在各個實現中是一致的,因為它們必須至少模擬該格式的精確精度。
另一方面, 同一實現中的兩個不同操作可能產生不同的精度誤差,因此通常精確的等式對於任何浮點實現都是有風險的。
因此,最好使用“epsilon”值,也許將其包含在名為Utils.isSufficientlyEqualTo
類的庫函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.