0

我已经在 RStudio 上尝试了以下代码,并期望出现 0、1 和 0.5。但是,它显示了一个非常小的数字而不是 0,我认为它必须使用某种算法来近似 sin 函数。

sin(c(pi, pi/2, pi/6))

这是结果

1.224606e-16 1.000000e+00 5.000000e-01

我想知道在这种情况下他们是如何逼近 sin 函数的。

4

1 回答 1

0

尽管您的问题起初看起来很简单,但事实恰恰相反。每当您想知道一个函数在做什么时,您只需访问该函数,因为它是一个对象(它实际上是 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 中。为此,我推荐以下帖子:

C 如何计算 sin() 和其他数学函数?

于 2020-11-13T17:53:27.463 回答