我如何定义以度数而不是通常的弧度为参数的三角函数,并为这些参数计算正确的舍入结果?
在将参数传递给以弧度表示的相应函数之前将参数乘以是M_PI/180.0
行不通的,因为M_PI/180.0
不是 π/180。Handbook of Floating-Point Arithmetic 的第 5.5 节提供了一种计算参数正确舍入乘积 π/180 的方法,但有些参数仍然会使得该乘积接近两个连续可表示浮点数之间的中点,然后即使在弧度中应用正确舍入的函数也会产生错误的最终结果。
可以单独或组合使用的两种策略是使用更高的精度和使用来自CRlibm的三角函数sinpi
,它们分别计算和和。cospi
tanpi
sin(πx)
cos(πx)
tan(πx)
对于后一种策略,仍然存在除以 180 的问题,这对于许多论点来说并不准确。
关于更高精度的策略(将参数乘以 π/180 的扩展精度表示,然后以弧度应用扩展精度函数),“精确”情况可能仍然存在问题。指出 的唯一理性结果 和 的唯一理性结果的定理sin
仅cos
适用tan
于0
弧度版本。它显然不适用于度数版本,如果对于某些浮点输入 x,sindeg(x) 恰好是两个连续可表示浮点数之间的中点,那么再多的中间精度都不足以保证最终结果正确四舍五入。