Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript浮点算法中的跨浏览器一致性_Javascript_Floating Point - Fatal编程技术网

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结果为真。。。。