【发布时间】:2014-09-26 02:43:38
【问题描述】:
我如何定义以度数而不是通常的弧度为参数的三角函数,并为这些参数计算正确的四舍五入结果?
在将参数传递给以弧度表示的相应函数之前,将参数乘以 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) 和@987654329 @。
对于后一种策略,仍然存在除以 180 的问题,这对于许多论点来说并不准确。
关于更高精度的策略(将参数乘以 π/180 的扩展精度表示,然后以弧度应用扩展精度函数),“精确”情况可能仍然存在问题。指出sin、cos 和tan 的唯一理性结果的定理在0 中获得仅适用于弧度版本。它显然不适用于度数版本,如果对于某些浮点输入 x,sindeg(x) 恰好是两个连续可表示浮点数之间的中点,那么再多的中间精度都不足以保证最终结果被正确四舍五入。
【问题讨论】:
标签: floating-point trigonometry degrees elementary-functions