什么基础更适合我的BigInteger库?

时间:2011-08-27 04:31:33

标签: c++ biginteger

我已经在C ++中开发了我自己的BigInteger库,出于教学目的,最初我使用了基数10,它适用于加法,减法和乘法,但对于某些算法,如取幂,模幂运算和除法,它似乎是更合适的使用基础2。

我正在考虑从头开始重新启动我的项目,我知道你觉得什么基础更合适,为什么?提前谢谢!

3 个答案:

答案 0 :(得分:4)

如果查看大多数BigNum类型库,您会发现它们是基于现有的“SmallNum”数据类型构建的。这些“SmallNum”数据类型(short,int,long,float,double,...)是二进制的,因为计算的原因太多了。如果使用(例如)unsigned int s的向量,您的代码将更快(更多,更快,更快!)而不是基数为10位的向量。

这是性能确实重要的地方之一。假设您使用BigNum包来解决可以在不诉诸BigNums的情况下解决的问题。即使是最好的BigNum库也会比简单的非BigNum方法慢得多(慢得多)。如果你试图解决超出标准表示范围的问题,性能损失会使事情变得更糟。

克服这种固有惩罚的最佳方法是尽可能多地利用内置类型。

答案 1 :(得分:1)

与目标计算机上的字大小相同的基数,其中您将单词x word = doubleword作为基元。原始操作在机器指令方面整齐地运行。

答案 2 :(得分:1)

基数10表示对BigDecimal类型有意义,您需要准确表示小数分数(用于财务计算等)。

对于使用BigInteger的基数10表示,我看不到多少好处。它使字符串转换变得非常简单,但代价是使数学运算变得更加复杂。在大多数情况下,这似乎不是一个很好的权衡。