银行服务器是如何实现存储超大数字而不会溢出的

更新时间:01-23 教程 由 暗香浮 分享

广而泛之不谈具体场景吧。

我们可以根据数字的大小动态分配内存,位数不够了就再往上加。就好比我们从小学的加法从来没有限制过操作数的大小。纸有多长就能写多长。

只是这么做我们就不能享受机器语言中由硬件对整个整数所有32个位批量处理并且解决进位的待遇了。我们必须手动迭代,管理进位。

打个最直观但低效的例子。我们可以使用链表,将二进制数的低数位放在列表头方向,进行比如加法运算时同时迭代两个操作数的链表,按位相加,再加上上一位的进位,如此构造结果。这甚至是可以单纯靠布尔逻辑而不依赖硬件加法实现

当然,我们没有必要完全舍弃硬件带来的"批处理"功能。而且事实上,硬件中的"行波进位加法器"就是通过上面描述的原理实现的。只是行波进位加法器使用定长数组罢了。那么,我们可以在数组或者链表中,以硬件一批次能处理的大小存储大整数,用硬件实现的加法完成组内进位。而硬件加法产生溢出时通过比如在某一特殊寄存器中立下的flag告诉我们是否应该往下一组数位中输入进位。

如果是浮点数的话就用科学计数法吧。"浮点"这个叫法的来源就是这个。

声明:关于《银行服务器是如何实现存储超大数字而不会溢出的》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2103992.html