2010年10月存档

添加数字

介绍

我开始考虑精确的数值计算。作为解决问题的第一步,我一直在玩数字表示的加法,特别是进位look-ahead加法器.

这篇帖子讨论了加法并探索了一些变化,从我小时候学的标准算法开始,即从右到左(从最不重要到最重要)传播进位。为了好玩和好奇,我还尝试了一个使用循环编程的伪并行版本,以及一个state-monad公式。每一种变化都有自己的优雅。

虽然熟悉且简单,但从右到左的算法有一个基本的限制。因为它们以最低有效数字开始,所以不能应用具有无限多个递减有效数字的数字。要添加精确的实数,我们需要不同的算法。

给出了从右到左加法的清晰公式,并且考虑到确切的实际加法,我对从左到右加法很好奇。循环公式直接适用。令人高兴的是,monadic版本更容易适应,将通常的状态monad替换为向后的州monad。

为了在精确的实数加法中利用从右到左的算法,我不得不调整个位数的加法步骤,使其稍微宽松一点(不那么严格)。有了这个更改,无限位数加法就可以正常工作了。

继续阅读“添加数字”»