ActionScript3声明如下:
注意:数学函数acos、asin、atan、atan2、cos、exp、log、pow、sin和sqrt可能会根据CPU或操作系统使用的算法而产生稍微不同的值。在为所列出的函数执行计算时,Flash运行时调用CPU (如果CPU不支持浮点计算,则调用操作系统),结果显示根据所使用的CPU或操作系统略有变化。
我的web应用程序使用的是非常大的和很小的数字,我怀疑这取决于运行它的是哪台机器(尤其是那些处理器不像台式计算机那样强大的移动设备)。我的问题是,这种行为是语言的作用吗?
也就是说,我假设某些语言为上述函数实现了自己的算法,因此可能更一致(除了所有语言的处理器/CPU的选择所带来的舍入错误的差异)。
有人知道Javascript是否有自己的算法,还是将它们外包给ActionScript之类的CPU/处理器?
发布于 2011-11-20 17:01:47
摘自ECMAScript 5 standard,第15.8.2节
注意到这里没有精确地指定函数acos、asin、atan、atan2、cos、exp、log、pow、sin、sqrt和tan的行为,只是需要为表示感兴趣的边界情况的某些参数值提供特定的结果。对于其他的参数值,这些函数的目的是计算对熟悉的数学函数的结果的近似,但在选择近似算法时允许有一定的自由度。一般的意图是,一个实现者应该能够在给定的硬件平台上使用与C程序员在该平台上可用的相同的ECMAScript数学库。
虽然算法的选择取决于实现,但建议(但本标准没有具体说明)使用包含在fdlibm中的IEEE 754算法的近似算法,fdlibm是Sun Microsystems (http://www.netlib.org/fdlibm)的可自由分布的数学库。
本质上,这意味着每个实现(包括每个浏览器)都可以决定如何处理这些函数。正如建议的那样,我认为绝大多数人都使用fdlibm,尽管检查将留给读者作为练习。
https://stackoverflow.com/questions/8203007
复制相似问题