JavaScript浮点算法中的跨浏览器一致性
我的目标是拥有一个百度/弧度转换工具JavaScript浮点算法中的跨浏览器一致性,javascript,floating-point,Javascript,Floating Point,我的目标是拥有一个百度/弧度转换工具 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
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
或者在比较时必须使用ε
var epsilon = 0.0000001;
Math.abs(a - b) < epsilon
var epsilon=0.0000001;
数学abs(a-b)
无论编程语言如何,除非检查无穷大或NaN,否则使用与浮点数的等价比较都是不好的做法。最好检查一个值是否在某个公差范围内 ECMAScript标准将“数值”(技术上没有单独的整数类型)定义为“对应于IEEE 754值的双精度64位二进制形式”。这应该意味着行为在实现之间是一致的,因为它们至少必须模拟该格式的精确性
另一方面,同一个实现中的两个不同操作可能会产生不同的精度误差,因此一般来说,任何浮点实现都存在精确等式的风险
因此,最好使用一个“epsilon”值,也许将其包装在一个名为
Utils的库函数中。isSufficientlyEqualTo
只是感兴趣,你为什么不使用Math.PI
?如果你打算在这方面做数学,我建议你在下决心之前,现在就走epsilon路线level@LeshaOgonkov因为Math.PI是3.141592653589793,如果你让D_PI=2*Math.PI,那么D_PI==2*Math.PI是假的!!!但是'my'PI*2=='my'D_PI结果为真。。。。