当前位置: 首页 > 面试题库 >

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

严知
2023-03-14
问题内容

在节点命令行界面中运行此命令时:

> Math.tan(Math.PI/2)
16331778728383844

但是在Chrome中:

> Math.tan(Math.PI/2)
Infinity

都不都使用同一个V8引擎吗?

Node的结果甚至不等于JavaScript中的最大“整数”值。


问题答案:

如果查看该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可能正在使用最新代码,而当前的稳定节点正在使用其他三角代码。



 类似资料:
  • 问题内容: : 1 < 2 < 3 true : 3 > 2 > 1 false … … : 3 > 2 && 2 > 1 true 也许我真的在考虑问题,但是我认为它们都会评估为真。为什么不呢? 问题答案: 因为评估为小于, 但评估为不大于

  • 问题内容: 我遇到了这个表达式,我认为应该评估为True,但事实并非如此。 上面的语句按预期工作,但在以下情况下: 执行后,其结果为False。 我尝试搜索答案,但无法获得具体答案。谁能帮助我了解这种行为? 问题答案: 是一个运营商链,就像您 要做到这一点,您需要 和 都是如此。后者是错误的,因此是结果。添加括号不会再使运算符链接(某些运算符在括号中),这可以解释工作原理。 尝试: 再一次,一个很

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 主持人注意: 请不要编辑代码或删除此声明。空格模式可能是问题的一部分,因此不应不必要地对其进行篡改。如果您处于“空白无关紧要”的阵营中,则应该能够原样接受代码。 有可能用JavaScript 评估吗? 这是一家大型科技公司提出的面试问题。它发生在两周前,但我仍在努力寻找答案。我

  • 问题内容: 对于我确定的人来说,这是一个简单的答案。有人可以解释为什么此表达式的值为真吗? 问题答案: 因为您使用的是==(相似性)运算符,而PHP将字符串强制为int。 要解决此问题,请使用===(等于)运算符,该运算符不仅会检查值是否相同,还会检查数据类型是否相同,因此“ 123”字符串和123 int不会被视为相等。

  • 问题内容: 为什么用Python生成? 我在这里阅读以下内容: 如果两个字符串文字相等,则将它们放在相同的内存位置。字符串是不可变的实体。不会造成伤害。 那么每个Python字符串在内存中只有一个位置吗?听起来很奇怪。这里发生了什么? 问题答案: Python(例如Java,C,C ++ 、. NET)使用字符串池/内联。解释器意识到“ hello”与“ hello”相同,因此它优化并使用了内存中

  • 问题内容: 我真的不明白这是如何解析的。为什么第二个示例返回False? 谢谢你的帮助。我想我一定会错过一些非常明显的东西。 我认为这与链接重复项有细微不同: 为什么表达式0 <0 == 0在Python中返回False? 。 这两个问题都与人类对表达的理解有关。在我看来,似乎有两种评估表达方式的方法。当然,两者都不正确,但是在我的示例中,最后的解释是不可能的。 看着您可以想象每个被评估的部分都可