为什么节点不将Math.tan(Math.PI2)评估为Infinity而Chrome V8可以呢?

为什么节点不将Math.tan(Math.PI2)评估为Infinity而Chrome V8可以呢?,第1张

为什么节点不将Math.tan(Math.PI / 2)评估为Infinity而Chrome V8可以呢?

如果查看该

Math
对象的v8实现,则会看到:

function MathTan(x) {  return MathSin(x) / MathCos(x);}

实际上,

Math.cos(Math.PI/2)
也会在Node中返回一个异常值(实际上,是异常
Math.tan
结果的倒数):

> Math.cos(Math.PI/2)6.123031769111886e-17  // in Chrome, this is 0

因此,您的问题 简化 为: 为什么

Math.cos(Math.PI/2)
Node <= 0.10.24中的非零值?

这很难回答。正弦和余弦的实现由名为的数学运算函数提供,该函数

TrigonometricInterpolation
依赖于C
++代码生成的1800个样本值的反向查找表,该代码本身是在首次安装v8时生成的Python脚本。

但是,还值得注意的是,当前的trig查找代码最近替换了较旧的查找表,因此,当前版本的Node可能未使用最新的trig查找表(因为新代码于11月22日到达v8中)
,2013年,但在2013年12月0.10.24版之前,从v8到Node的唯一拉动是在2013年11月11日(即更改前的11天)。Chrome可能正在使用最新代码,而当前的稳定节点正在使用其他三角代码。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5126916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存