簡體   English   中英

JavaScript浮點運算中的跨瀏覽器一致性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM