如何编程对数?

时间:2012-05-24 06:09:02

标签: algorithm math parallel-processing logarithm cpu-speed

他们是否只是使用与线性搜索相同的机制,或者是以某种方式缩小范围,类似于二元搜索。

2 个答案:

答案 0 :(得分:15)

在任何体面的数学库中实现诸如自然对数之类的函数将使误差保持在ulp以下(精度最低的单位)。数学库函数的实现者的目标是找到一些最佳近似,一个通过尽可能少的计算实现所需精度的近似。泰勒系列通常是一个糟糕的选择,因为需要太多的术语来达到所需的精度。

典型的选择武器是将所有可表示的实数范围缩小到某个非常小的区域,然后使用一些最佳近似值,在这个窄范围内产生所需函数的精确近似值。这种最佳近似的典型选择武器是多项式或有理多项式(两个多项式的比率)。该实现仅包含多项式系数。这些系数是通过一些优化技术构建的,例如Remes Exchange算法。

在自然对数的情况下,有一种简单的方法来缩小范围。实数几乎普遍用尾数和指数表示: x = m * 2 p ,其中 p 是一个整数, m 介于1和2之间。因此log( x )= log( m )+ p < / I> *日志(2)。后一项 p * log(2),只是乘以已知常数。因此问题减少到找到1到2之间(或1/2和1之间)的数字的对数。通过使用√2在[1,2]的中间对数的事实可以进一步减小范围。因此,所需要的是计算1和√2之间的数的对数的方法。这通常用有理多项式完成。二阶多项式多项式与三阶多项式的比率对此非常有效。

答案 1 :(得分:2)

有几种计算对数的方法。见this