多精度计算备忘录之数据结构
2014-08-24 14:31
120 查看
前段时间对一个多精度计算的大数类维护已经过一段落,
现对此做个总结,以备遗忘.
初步定为大约有 数据结构,,乘法,除法,倒数,平方,有理数幂等,可能到时会略有更改.
数据结构篇:
根据需要,可采用的2次幂进制(比如2^32,2^31,2^30,2^28,2^16等等),采用10次幂进制(10^9,10^4,10^1等等),, 对这些进制各有优劣.
采用二进制本身计算相对简便,但是由于人习惯于 10进制显示的,这进制间还需要有个转换过程,而这个转换过程相对还比较复杂,对有显示需求的,采用二进制并不是非常合适.
采用十进制则相反,计算相对繁复一些,但是显示直观.
通常如果有显示需求,采用10进制比较合适,否则二进制更方便优化.
至于对二(十)进制体系内部的不同的进制选取,如(2^32,2^31,2^30,10^9,10^4,10等等),通常这些不同的选取是基于优化对数据运算时溢出处理的考虑.这里对此不再展开
当然,还存在其他进制,比如7进制,36进制,这些特殊的进制通常是作为特殊用途的,通常的多精度计算并不会选择这些相对特殊进制.
指数实际和小数点实际位置相关.
这里采用的是数组的数据结构来存储真实数据,通常根据实际需要数组长度需可调整,
直接看成 typedef std::vector<unsigned int> DATA;这也无妨碍理解.
这里还有个取舍问题,就是这个指数是否需要使用,有这个指数,数据的末端0则可以直接被处理掉.但是在其他运算时,这个指数有个额外的偏移量计算.稍稍增加计算量.
具体实现时,可以根据需要选取是否使用这个指数,
这里具体的实现是采用10^9进制,并没有采用指数这个参数.
数据结构,大致到这里.
由于多精度加法,减法,基本上实现都是相同的,没有什么特别的优化手段,不再对多精度的加法,减法进行讨论.
后面对会对多精度运算里,相当重要的乘法展开讨论
现对此做个总结,以备遗忘.
初步定为大约有 数据结构,,乘法,除法,倒数,平方,有理数幂等,可能到时会略有更改.
数据结构篇:
根据需要,可采用的2次幂进制(比如2^32,2^31,2^30,2^28,2^16等等),采用10次幂进制(10^9,10^4,10^1等等),, 对这些进制各有优劣.
采用二进制本身计算相对简便,但是由于人习惯于 10进制显示的,这进制间还需要有个转换过程,而这个转换过程相对还比较复杂,对有显示需求的,采用二进制并不是非常合适.
采用十进制则相反,计算相对繁复一些,但是显示直观.
通常如果有显示需求,采用10进制比较合适,否则二进制更方便优化.
至于对二(十)进制体系内部的不同的进制选取,如(2^32,2^31,2^30,10^9,10^4,10等等),通常这些不同的选取是基于优化对数据运算时溢出处理的考虑.这里对此不再展开
当然,还存在其他进制,比如7进制,36进制,这些特殊的进制通常是作为特殊用途的,通常的多精度计算并不会选择这些相对特殊进制.
class HUGEINT{ bool bSymbol; //符号 //int iExponent; //指数 DATA vData; //真实数据. static unsigned int iRADIX; //进制 = 10^9 }这表示法有点类似于科学计算法,符号位,指数,真实数据,
指数实际和小数点实际位置相关.
这里采用的是数组的数据结构来存储真实数据,通常根据实际需要数组长度需可调整,
直接看成 typedef std::vector<unsigned int> DATA;这也无妨碍理解.
这里还有个取舍问题,就是这个指数是否需要使用,有这个指数,数据的末端0则可以直接被处理掉.但是在其他运算时,这个指数有个额外的偏移量计算.稍稍增加计算量.
具体实现时,可以根据需要选取是否使用这个指数,
这里具体的实现是采用10^9进制,并没有采用指数这个参数.
数据结构,大致到这里.
由于多精度加法,减法,基本上实现都是相同的,没有什么特别的优化手段,不再对多精度的加法,减法进行讨论.
后面对会对多精度运算里,相当重要的乘法展开讨论
相关文章推荐
- 多精度计算备忘录之数据结构
- 数据结构(严蔚敏)计算1-1/x+1/x*x…(第一章)
- C#数据计算精度比较低
- 数据结构实验:栈实现计算器(表达式计算)
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- 数据结构——二叉树遍历、深度、叶子节点数计算
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- java中的数据精度计算问题
- 多精度计算备忘录之乘法 ------ 复杂度分析
- 数据结构与算法 Big O 备忘录与现实
- 数据结构之应用"栈(Stack)"实现: 解析算术表达式及计算
- 【数据结构】根据主定理,计算时间复杂度
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- 数据结构算法之表达式自动计算
- 数据结构6:使用栈计算逆波兰表达式
- 计算结构/类中的数据成员的偏移
- 数据精度个数是从首个不为零的数开始计算
- 数据结构大小的计算-sizeof
- 14、Java中用浮点型数据Float和Double进行精确计算时的精度问题
- 数据结构(九)满二叉树深度计算