【发布时间】:2016-04-19 14:17:21
【问题描述】:
在从 unix m 数学库调用 sincos(x,&s,&c) 之后,很自然地会得到 s/c 的切线。这是安全的,还是可能存在(生病的)情况,由于精度问题,应该首选(据说)更昂贵的tan(x)?
【问题讨论】:
-
您认为“精度损失”究竟是什么?你能缩小你认为“安全”的范围吗?在您的用例中,
sin()/cos(x)与tan(x)相比有多少额外的错误是可以接受的? -
根据您获得该余弦的位置,它可能在 pi/2 附近有较大的相对误差,因为它是一个很小的数字,除以它会转化为切线中的较大绝对误差。跨度>
-
@njuffa 我想这取决于具体的应用程序,但由于我更担心灾难而不是极端精度,让我们将阈值固定为 1e-6 的双精度相对偏差。
-
@harold 我编辑了指定余弦原点的问题。
-
我猜你的意思是
libm?有任意数量的libm实现。假设有问题的libm实现sincos()使得在整个输入域中准确计算正弦和余弦(最多有几个ulps 的误差界限),而不是,将tan(x)计算为@987654332 @ 是安全的,但由于除法的额外舍入误差,最大 ulp 误差通常会略大于tan(x)本身。对于float数据,这很容易通过详尽的测试来显示。
标签: performance floating-point precision trigonometry scientific-computing