C++大整数系列文章基本已经完成,主要介绍了无符号大整数的实现细节,基于无符号大整数的带符号大整数,以及基于无符号大整数的有理数实现。 本文计划对前面的过程做一下小小的总结,应该不会太长。

目录

其实前面几篇文章就已经是设计和实现大整数类的总结了,断断续续地整理了两个月的时间。 如果这些工作是在三年前完成的,那么还是挺值得骄傲的,毕竟那个时候刚接触编程没多久,可以锻炼一下自己对程序设计语言的理解,可现在做就明显觉得太晚了。 如果读者刚学完C++,可以尝试自己实现一个大整数运算的类来进行练习,一开始不需要刻意在意性能,只要能把自己学到的知识恰到好处地应用到实际环境中就可以了。

在每篇文章后,作者都给出了一个自己实现的版本,可能实现方法并不是最好的,甚至还有一些错误,但用来参考还是可以的。在第一篇概述中,我们讨论了数据的表示方式和存储方式,选择了作者认为(性能)最好的表示方法,实际上其它的方法也是可以的,比如用字符串、定长数组、甚至是链表来保存数据,这些只是数据表示和存储上的差别,文章中介绍的计算方法同样适用于这些表示和存储方式。

在作者实现的过程中,参考过Java中BigInteger类的实现,以及cpython中int类型的实现,作者认为cpython中实现的版本更加适合于计算。 在乘法、除法以及进制转换的实现过程中,基本上是按照Donald E. Knuth著作的 The Art of Computer Programming 中描述的算法来实现的。 可能算法不是那么容易理解,但效率非常高,尤其是计算除法的过程。 如果没有参考这本书,作者可能会选择使用二分法和乘法来计算除法。

在一开始,作者只计划实现一个无符号大整数,并且花了较多的时间去进行整理和优化,并未打算实现后面的带符号大整数以及有理数类。 在完成了前面的工作之后,发现基于无符号大整数可以很容易地实现带符号大整数和有理数类,可能实现一个复数类也不会太复杂,但觉得应该不会有太大的用处,所以就不再实现了。

总的来说,在设计和实现这些算法和类的过程中还是学到了不少知识,感觉自己的水平还是太有限了,应当继续学习来提高自己的水平和能力,希望几年之后再回来看这些文章,能够有不一样的感受。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注