在任何体面的数学库中实现诸如自然对数之类的函数,都会使误差保持在ulp(最低精度单位)以下。数学库函数的实现者的目标是找到一些最佳近似值,该近似值可以通过尽可能少的计算来达到所需的精度。泰勒级数通常是一个糟糕的选择,因为要获得所需的精度需要太多的项。
选择的典型武器是将所有可表示的实数的范围减小到某个很小的区域,然后使用一些最佳近似值,从而在此窄范围内产生所需函数的精确近似值。最佳逼近的典型选择武器是多项式或有理多项式(两个多项式的比率)。该实现仅包含多项式系数。这些系数是通过某种优化技术(例如Remes交换算法)构建的。
在自然对数的情况下,有一种简单的方法可以减小范围。实数几乎普遍用尾数和指数表示: x = m * 2 p,其中 p 是整数, m
在1到2之间。因此log( x )= log( m )+ p * log( 2)。后一项, p *log(2)只是一个已知常数的乘法。因此,问题减少到找到1到2(或1/2到1)之间的对数。通过使用√2在[1,2)中间对数的事实,可以进一步减小范围。因此,所需要的只是一种计算1到√2之间的对数的方法。通常使用有理多项式来完成此 *** 作。为此,二阶多项式多项式与三阶多项式的比率非常好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)