我已经在 RStudio 上尝试了以下代码,并期望出现 0、1 和 0.5。但是,它显示了一个非常小的数字而不是 0,我认为它必须使用某种算法来近似 sin 函数。
sin(c(pi, pi/2, pi/6))
这是结果
1.224606e-16 1.000000e+00 5.000000e-01
我想知道在这种情况下他们是如何逼近 sin 函数的。
我已经在 RStudio 上尝试了以下代码,并期望出现 0、1 和 0.5。但是,它显示了一个非常小的数字而不是 0,我认为它必须使用某种算法来近似 sin 函数。
sin(c(pi, pi/2, pi/6))
这是结果
1.224606e-16 1.000000e+00 5.000000e-01
我想知道在这种情况下他们是如何逼近 sin 函数的。
尽管您的问题起初看起来很简单,但事实恰恰相反。每当您想知道一个函数在做什么时,您只需访问该函数,因为它是一个对象(它实际上是 R 中的一个对象):
sin # function (x) .Primitive("sin")
.Primitive 是 R 调用 C 的方式之一。如果您想查看 C 代码,则可以使用 pryr 库,如下所示:
pryr::show_c_source(.Primitive(sin(x)))
# do_math1 with op = 21
它还会打开一个 Github 页面,其中包含 algorithm.c 的代码,R 的算术核心。R 使用带有选项 21 的 do_math1 函数计算 sin。如果你想更进一步,你需要了解 sin 函数是如何估计的在 C 中。为此,我推荐以下帖子: