从unix sincos(x,&s,&c)
数学库调用m
后,将切线作为s/c
是很自然的。这是安全的还是可能存在(病)的情况,由于精度问题,应该优先选择(假设)更昂贵的tan(x)
?
答案 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,了解错误传播的快速简洁介绍,这是解决此类问题的好方法。