计算tan(x)= sin(x)/ cos(x)会导致精度损失吗?

时间:2016-01-14 09:57:32

标签: performance floating-point precision trigonometry scientific-computing

从unix sincos(x,&s,&c)数学库调用m后,将切线作为s/c是很自然的。这是安全的还是可能存在(病)的情况,由于精度问题,应该优先选择(假设)更昂贵的tan(x)

1 个答案:

答案 0 :(得分:0)

如果sin(x)中的误差是es,并且cos(x)中的误差是ec,那么t =(sin(x)/ cos(x)中的误差是

et = abs(t)*sqrt((es/sin(x))^2 + (ec/cos(x))^2)

sin,cos和tan中的错误应该在数字表示的精度乘以值,可能是一两次关闭。由于误差将以数字的精度跟踪,因此上述等式减少到

et = sqrt(es^2 + ec^2)

和es和ec应该彼此接近。因此,使用sin / cos而不是新的切线计算的总误差应该比直接计算切线的误差大约sqrt(2)。

假设sin,cos和tan的误差大致相同,但这些天是一个很好的假设。在函数范围内有一个小的摆动错误,但是在计算过程中应该使用一些扩展的精度位来处理,并且不应该在你看到的值中显着出现。

当然,这是否重要取决于具体情况。

请参阅http://lectureonline.cl.msu.edu/~mmp/labs/error/e2.htm,了解错误传播的快速简洁介绍,这是解决此类问题的好方法。