我们在程序中执行的数字操作受到语言为给定数据类型(或可能是硬件支持)指定的字节数的限制。假设我可以使用整数来计算我的薪水(甚至“短期”足以获得一年的收入!!!;))但不能对比尔盖茨的财富做同样的事情。所以,我们会去寻找长期以来的事情。但是,我们还不会受到给予我们的比特数的支配。
那么,如果我在软件中模拟数值运算怎么样?假设一个抽象的类,可以对1000个数字的数字进行数值运算...... 当然它太慢了,但我并不太担心复杂性,而是更多地关注可计算性......
也许我可以用它来计算一个月内达到1000位数的PI或几年内的Mersenne Primes并带回家$ 100K;)
所以现在我的问题, 1)是否已经有任何这样的库来做这种事情(在C / C ++中)。 2)如果我去实施一个,你对我有什么建议吗? (+, - ,*,/,%,<<,>>操作应该足够我猜)
PS:
我是C / C ++程序员。
这种限制从我上学的日子开始困扰我。
答案 0 :(得分:2)
这种数据类型称为任意精度数。在Java中,有类BigDecimal
和BigInteger
来处理数字级别的基本操作(+, - ,*,/)。它们没有“内置”尺寸限制。它们实际上并不那么慢,并且被用于许多现实世界的领域。
C / C ++没有内置但是有很多库。在此处查看列表: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries