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