Math.tan(x)实际上是如何工作的?(Javascript)

Math.tan(x)实际上是如何工作的?(Javascript),javascript,math,Javascript,Math,我试图理解math.tan方法背后的数学原理,但它没有任何意义。有人能给我解释一下它是怎么工作的吗 首先,求解切线角的数学公式是切线=相反/相邻。这意味着我需要知道三角形的两边,才能算出切线角。然而,Math.tan方法只接受一个弧度参数,而不是两条边的长度,所以我不明白它是如何计算切线的角度的 接下来的例子中,他们展示了将难以置信的巨大弧度值传递到方法中,并获取一个值。例如,W3学校展示了Math.tan(90)的例子,但是90弧度等于5156.6度,这对于直角三角形的一个角来说是不可能的角度

我试图理解math.tan方法背后的数学原理,但它没有任何意义。有人能给我解释一下它是怎么工作的吗

首先,求解切线角的数学公式是切线=相反/相邻。这意味着我需要知道三角形的两边,才能算出切线角。然而,Math.tan方法只接受一个弧度参数,而不是两条边的长度,所以我不明白它是如何计算切线的角度的

接下来的例子中,他们展示了将难以置信的巨大弧度值传递到方法中,并获取一个值。例如,W3学校展示了
Math.tan(90)
的例子,但是90弧度等于5156.6度,这对于直角三角形的一个角来说是不可能的角度


这个方法是如何工作的,在将90弧度变成-1.9952004122008242的切线角的幕后发生了什么?首先,让我们讨论一下切线是什么:特定点坐标的切线是
y/x
(参见示例)

如果你想让π的切线大于2,在一个图上,它是90度角,所以坐标是
(0,1)
。然后你只需除以
1/0

然而,
Math.tan
不是很精确。在Chrome 52中,
Math.tan(Math.PI/2)
(来自上面的视频)是
16332353195370
,即使它应该在JavaScript中计算为
无穷大
值(数学值实际上是未定义的,因为它是
1/0

根据,V8实现为:

function MathTan(x) {
  return MathSin(x) / MathCos(x);
}
(作为旁注:Chrome实际输出的值大于
Number.MAX\u SAFE\u INTEGER
,您可以通过运行
Number.MAX\u SAFE\u INTEGERtrue
,来证明这一点,因此Chrome将其视为“接近无穷大”。)

编辑
缺少精确值的原因是pi通常表示为固定值(因为我们在计算机内存中有限制),即使它在编程环境之外应该是“无限”或“未定义”。例如,在我的浏览器中,
Math.PI
固定在
3.141592653589793

你读了好的文档吗?我投票将这个问题作为离题题来结束,因为问题是对基础数学概念缺乏最低限度的理解。这个问题属于它,它可能会在幕后做
角度%(2*PI)
来获得一个范围内的角度。我理解计算相切角度背后的数学,问题是这个方法没有像你期望的那样使用那个数学。在javascript开发人员之外问这个问题只会得到与谷歌搜索如何找到切线角度相同的回答。也就是说,切线=相反/相邻,这显然是这个方法没有使用的。这不适用于@KenY-N,例如90/2*PI=14.3239,其中作为Math.tan(90)=-1.9952004122008242“即使它应该”——它应该适用于
π/2
,而你有
Math.PI/2
<代码>π是无理的。“然而,Math.tan不是很精确”——这不是
Math.tan
问题。它用cos除以罪恶,就是这样!)@谢谢你的评论。很好的澄清。我的意思是,在编程之外的世界中,
pi/2
应该是“有限”或“未定义”,但我们对计算机内存中可以保存的数字有限制。例如,我的浏览器中的
Math.PI
只是
3.141592653589793
@efarley,这是入门级的三角函数…顺便说一句,这就是
Math.tan
在现代v8中的实现方式(不再是简单的
sin/cos
除法):