使用GMP进行任意精度算术

时间:2011-06-20 16:54:08

标签: c++ gmp arbitrary-precision

我正在使用GMP库制作一个Pi程序,它将计算大约7万亿个Pi的数字。问题是,我无法弄清楚需要多少位来保存那么多小数位。

3 个答案:

答案 0 :(得分:1)

7万亿个数字可代表10 ^(7万亿)个不同数字中的任何一个。

x位可以表示2 ^ x个不同的数字。

所以你要解决:

2^x = 10^7000000000000

取双方的log-base-2:

x = log2(10^7000000000000)

回想一下log(a^b) = b * log(a)

x = 7000000000000 * log2(10)

我得到23253496664212位。为了安全,我会添加一两个。不过,祝你好运找到PB级别。

我怀疑你需要一个更有趣的算法。

答案 1 :(得分:1)

我想纠正一个关于答案答案中所写内容的事情:

  

回想一下log(a ^ b)= a * log(b)

嗯,恰恰相反:

log(a^b) = b * log(a)

答案 2 :(得分:0)

2 ^ 10 = 1024,因此十位将代表略多于三位数。既然你谈论的是7万亿个数字,那就是23万亿比特,或者大约3太字节,这比我去过Costco的一个驱动器上的数据要多。

你可能会变得过于雄心勃勃。我想知道每次操作读取和写入整个磁盘的I / O时间。

(解决它的数学方法是使用对数,因为需要7万亿个数字表示的数字具有大约7万亿的对数基数10.在现有基数中找到数字的对数,转换基数,你得到了答案。对于基数2和基数10之间的简写,使用十位==三位数,因为这不是很大的错误。它说2的对数基数为.3,当它实际上更像是0.301)