从左到右计算googolplex二进制

时间:2014-08-14 03:15:40

标签: javascript php c++ c numbers

如何从左边计算googolplex(10 ^(10 ^ 100))前导N(例如:100)二进制数字?

我知道如何从右到左计算二进制文件,但这可能需要数百年(Reference)才能运行...

2 个答案:

答案 0 :(得分:2)

没有答案,但有进一步分析的建议。

如果你想要它是二进制的,那么你想要从第N位开始的位,其中N = X + 1,其中X描述如下:

2 ^ X = 10 ^(10 ^ 100) 记录日志(b = 10)=>

X = 10 ^ 100 / log(2)==> ~3.3 E 100

仍然不确定如何从那里减少它,但也许玩对数身份可能会很有趣。如果你可以计算X,也许你可以提出一个长除法算法,虽然你的参考上的运行时间参数让我想象计算的运行时可能是相同的。即在600年左右见到你。

另一个想法可能是研究数字协处理器如何以二进制形式创建iEEE尾数。

也许有一种算法可以用来做这样的事情。

只是猜测

答案 1 :(得分:2)

所以一些基本的数学有助于概述方法。我会强调一些亮点:

  • 您希望以二进制方式准确计算左数字。
  • 数学上的数字在基数乘法/除法方面是不变的
  • 权力相当于日志空间中的乘法
  • 基数的乘法/除法相当于在日志空间中添加整数

BitBlitz有正确的想法 - 您可以使用对数来解决这个问题。特别是,在基数2中取10的对数,乘以10 ^ 100,并忽略(基数2)小数点左边的所有内容。为了给你一个想法,10 ^ 100显然是100位数;使用1K = 2 ^ 10 = 10 ^ 3近似值,即大约100/3 K或33K,乘以10,即大约330位移动日志以超过所有这些你不关心的位。一旦你翻过它并开始点击二进制“小数”,你将计算数字的对数 - 从左到右。收集大量此类数字,执行它的反向日志,结果二进制数字将与您想要的数字相匹配。

你肯定需要一个bignum库来完成这项任务;长双不会削减它。但是应该合理地使用这种方法来收集合理数量的最左边的数字。