算法的乐趣 · 第五十三节
《算法的乐趣》第五十三节
本节从作者写的第一个计算器程序因整数溢出和浮点数有效位不足导致计算不准确说起,引出大整数计算的必要性——如天文计算需要极高的精度。
本节从作者写的第一个计算器程序因整数溢出和浮点数有效位不足导致计算不准确说起,引出大整数计算的必要性——如天文计算需要极高的精度。大数计算用程序模拟竖式手工计算,存储方式有字符串和大数数组两种,本章采用大数数组,每位用一个32位无符号整数表示(即2进制),并用独立的符号标志属性支持带符号运算,先实现无符号运算再处理符号。
大整数加法按位相加并处理进位,利用64位整数判断是否溢出;带符号加法中,同号直接相加,异号转为无符号减法。大整数减法按位相减并处理借位,无符号减法假设被减数不小于减数;带符号减法中,异号转为加法,同号则以绝对值大者减小者,符号取绝对值大者的符号,另用忽略符号的比较函数比较绝对值大小。大整数乘法按位相乘并处理进位,进位值可能超过1,计算过程仿照十进制竖式乘法,逐位相乘、处理进位后移位重复,直至完成。