【问题标题】:Calculate googolplex binary from left to right从左到右计算googolplex二进制
【发布时间】:2014-08-14 03:15:39
【问题描述】:

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

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

【问题讨论】:

  • 根据链接:...Carl Sagan estimated that writing a googolplex in standard form (i.e., "10,000,000,000...") would be physically impossible, since doing so would require more space than is available in the known universe.
  • 但是如果我只想计算前100个二进制数字,可以吗?
  • 我不明白calculate the first N binary digits 是什么意思。
  • @FiddlingBits 我的意思是左边,例如:1000dec = 1111101000b,前6位二进制数字是“111110”,可能我应该使用“领先”=)

标签: javascript php c++ c numbers


【解决方案1】:

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

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

2^X = 10^(10^100) 取 log(b=10) =>

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

仍然不确定如何从那里减少它,但也许玩对数恒等式可能会很有趣。如果您可以计算 X,也许您可​​以提出一个长除法算法,尽管您参考中的运行时间参数让我想象计算它的运行时间可能是相同的。 IE。约 600 年后见。

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

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

只是猜测

【讨论】:

    【解决方案2】:

    因此,一些基本的数学有助于概述该方法。我将强调一些亮点:

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

    BitBlitz 的想法是正确的——你可以使用对数来解决这个问题。特别是,取以 2 为底的 10 的对数,乘以 10^100,然后忽略(以 2 为底)小数位左侧的所有内容。给你一个概念,10^100 显然是 100 位;使用 1K=2^10=10^3 近似值,大约是 100/3 K 或 33K,乘以 10,即大约 330 位左移对数以通过所有您不关心的位。一旦你翻阅了它并开始点击二进制“小数”,你将计算数字的对数——从左到右。收集大量此类数字,对其进行逆对数,得到的二进制数字将与您想要的匹配。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2018-01-05
      • 2019-09-22
      • 2017-06-05
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多