Ric*_*aca 28 javascript specifications atan2 language-lawyer
我在的输出的最后一位看到Firefox和Safari之间的差异Math#atan2。
我的代码:
Math.atan2(-0.49999999999999994, 0.8660254037844387)
Run Code Online (Sandbox Code Playgroud)
Safari(12.1.1)提供,-0.5235987755982988但Firefox(Mac / 67.0)提供-0.5235987755982987。
这当然是微小的差异。但是,似乎所有实现都应该在所有输入上产生相同的输出。例如,这样的差异可能导致if语句根据浏览器遵循不同的路径。
我看到的内容是否违反任何版本的ECMAScript规范?
Mar*_*yer 32
ECMAScript 2015规格说明如下:
函数acos,acosh,asin,asinh,atan,atanh,atan2,cbrt,cos,cosh,exp,expm1,hypot,log,log1p,log2,log10,pow,pow,random,sin,sinh,sqrt,tan的行为和tanh在这里没有明确指定,只是要求某些表示感兴趣边界情况的参数值需要特定结果。对于其他参数值,这些函数用于计算对熟悉的数学函数的结果的近似值,但是在选择近似算法时允许一定的自由度。通常的目的是,实现者应该能够对ECMAScript使用相同的数学库。在给定的硬件平台上可供该平台上的C程序员使用。
尽管算法的选择留给实现,但建议(但未由该标准指定)实现使用fdlibm中包含的IEEE 754-2008算法的近似算法,fdlibm是Sun Microsystems(http:/ /www.netlib.org/fdlibm)。
5.1规范具有类似的语言。
因此,我认为可以肯定地说这种行为没有违反规范。