如何以度为单位计算正确的三角函数?

Pas*_*uoq 7 floating-point trigonometry degrees elementary-functions

我如何定义以度为单位而不是通常的弧度的参数的三角函数,并为这些参数计算正确的舍入结果?

在将参数M_PI/180.0传递给弧度中的相应函数之前将参数乘以不起作用,因为M_PI/180.0它不是π/ 180."浮点运算手册"第5.5节提供了一种方法来计算参数的正确舍入乘积π/ 180,但是一些参数仍然是这样的,即该乘积接近两个连续可表示浮点数之间的中点,然后在弧度中应用甚至正确舍入的函数可能会产生错误的最终结果.

其可以单独或组合工作的两种策略是使用较高的精度和使用sinpi,cospi,tanpi从三角函数CRlibm,分别计算sin(?x),cos(?x)tan(?x).

对于后一种策略,存在180分割的问题,这对许多论点来说并不完全正确.

关于更高精度的策略(将参数乘以π/ 180的扩展精度表示,然后应用弧度的扩展精度函数),"精确"情况可能仍然存在问题.指出的唯一合理结果的定理sin,costan一个合理的说法中得到0仅适用于弧度版本.它显然不适用于度数版本,如果对于某些浮点输入x,sindeg(x)恰好是两个连续可表示的浮点数之间的中点,那么没有多少中间精度足以保证最终结果是正确舍入的.

tmy*_*ebu 3

q有理数的唯一有理数cosdeg(360q)以 1、2、3、4 或 6 作为分母。 Joerg Jahnel 的这篇论文在第 6 节中使用域论进行了简短而优美的证明。(事实上,作者使用欧拉 totient 函数描述了代数数的次数。)因此不存在介于两个相邻的中间的cosdeg(360q)浮点浮点数字。qcosdeg(360q)

所以我猜答案是“sin与你实现弧度的朋友的方式大致相同”,尽管 @gnasher729 提出了一个很好的观点,即度数的参数减少要好得多。

  • @PascalCuoq:如果您想要类似的棕褐色结果,http://oberlin.edu/faculty/jcalcut/tanpap.pdf 看起来不错。 (2认同)