【问题标题】:What's the biggest number in a computer?计算机中最大的数字是多少?
【发布时间】:2011-04-12 03:05:59
【问题描述】:

刚刚被我 5 岁的孩子问:计算机中最大的数字是多少?

我们不是在谈论特定数据类型的最大数量,而是计算机可以表示的最大数量。

不允许无穷大。

更新我的孩子总是想打印为 好吧,假设计算机需要 打印这个号码和孩子 知道这是一个很大的数字。当然, 在实践中,我们不会打印,因为 没有足够的树。

【问题讨论】:

  • 我的总是大一号! (这能回答问题吗?)
  • 我喜欢几乎没有一个答案考虑到一个 5 岁儿童提出的问题。
  • 很遗憾问题已关闭。这实际上很有趣。假设您的硬盘驱动器为 1 TB(8'000'000'000'000 位),并且您将在纸上以十六进制数字打印适合它的数字(没有人会这样做,但让我们假设),即 2,000,000,000,000 十六进制位数。每页将包含 4000 个十六进制数字(40 x 100 位)。现在将页面堆叠在一起(假设每页的厚度为 0.004 英寸/0.1 毫米),那么堆叠的高度将是 5 公里。
  • 投票重新开放。关闭的给定原因似乎是虚假的“不是一个真正的问题”。这显然是一个真正的问题,虽然它可能跑题了......
  • 接近票数是什么。呃

标签: numbers limit representation


【解决方案1】:

大概2^AVAILABLE_MEMORY_IN_BITS

编辑:以上内容用于实际存储数字并将所有媒体(RAM、HD、云等)视为内存。减去操作系统占用空间(以 KB 为单位)不会“大致”降低准确度...

如果您想以一种有意义的方式“表示”一个数字,那么您可能希望使用 CPU 提供的功能:无符号 32 位整数(大约 4 Gig)或无符号 64 位整数,适用于您孩子将要来的大多数计算机接触。

注意 与 5 岁儿童交谈:通常,他们只是想要一个事实。给他一个非常大且非常准确的数字(很多位数),例如4'294'967'295。然后,一旦玻璃离开他的眼睛,试着看看你在解释计算机如何表示数字方面能走多远。

编辑#2:我曾经读过这篇文章:Who Can Name the Bigger Number,它应该为您的孩子提供大量有趣的信息。显然他不是你正常的五岁孩子。所以这可能会让你在数字和计算方面开始一个很酷的方向。

【讨论】:

  • 减去操作系统所需的 640K。
  • 硬盘也可以使用。 ;)
  • 其实是(2^(AVAILABLE_MEMORY_IN_BITS+1)) - 1
  • @Developer Art:短语“可用内存”已经考虑了操作系统和任何其他当前正在运行的程序使用的内存。
  • “显然他不是你正常的五岁孩子。” - 我不知道。 5 岁的孩子擅长提出这样的深层次问题。问题是大多数 5 岁的孩子 1) 没有意识到问题的深度,2) 没有能够理解答案的知识,以及 3) 甚至连听的注意力都没有答案。
【解决方案2】:

大小显然会受到您设法放入 PC 的硬盘总大小的限制。毕竟,您可以将数字存储在占用所有磁盘空间的文本文件中。

即使在一个简单的盒子中,您也可以拥有 4x2Tb 驱动器,因此可用容量约为 8Tb。如果存储为二进制,那么最大的数字是2 pow 64000000000000

【讨论】:

  • 实际上我会说机器所有可用存储的大小,而不仅仅是它的磁盘。
  • 好吧,如果你使用文本文件,那么你的数字就不会像使用二进制文件一样大。
  • 宇宙原子在PC中是不可用的。只有一小部分。
  • Woody:如果你使用压缩呢?
【解决方案3】:

位是不是数字。 ,作为一个程序员,给他们你想要的意义,可能是数字。

现在,我决定 1 代表“人类曾经想过的最大数字加一”。

【讨论】:

  • 可能不符合问题的精神...... :)
  • 肯定1是最大的数字
  • +1。很好的一点。其他人似乎都只考虑整数。但是位 不是 数字 - 例如,64 位浮点数的范围大于 0..2^64-1
  • “人类所想到的最大数字加一”并没有明确定义......而且计算机可能想到的数字可能比人类所拥有的要大得多;)
  • 然后我打电话给A(your number, your number) (en.wikipedia.org/wiki/Ackerman_function) 得到一些更大的东西。它在哪里结束?
【解决方案4】:
//  wait to see
for(;;)
{
    printf("9"); 
}

【讨论】:

  • 它会停止,只是不会自行停止。
  • 什么时候停止就是答案?
  • 这是一个相对较小的数字。当计算机断电时,打印 9 将结束。那是在地球坍塌成太阳、宇宙坍塌或解体之前的某个时间。结果 999...9 是一个数字方式,方式,小于 BB(100)。
  • @Adrian Fritsch,你是对的,无论如何,同样的笑话仍然可以添加 printf("BB("); 作为第一行.. 当然,最后一个出来,请关闭括号
  • @Adrian Fritsch 感谢您对这个答案感兴趣,但我真的更喜欢(并且我投票支持)Alexandre C. 答案。无论如何,如果你注意你会发现如果你能提出任何具有重复版本的固定表达式,那么算法版本会更大——时间在我这边——也许任何数字表示都可以有一个更大的重复版本,那么如果我们在“有限的竞技场”中竞争,你的符号是有意义的,但如果竞技场是无限的,那么最聪明的概念的简单重复就会更大。
【解决方案5】:

这取决于您用来表示它的数据类型。计算机仅存储位 (0/1)。作为开发人员,我们赋予这些位意义。 (65 可以是数字或字母A)。

例如,我可以将我的数据类型定义为1^N,其中 N 是无符号的,由任意大小的位数组表示。下一个人可以提出10^N,这将是我最大数字的十倍。

当然,会有差距,但如果你不需要它们,那没关系。

因此,这个问题没有意义,因为它没有上下文。

【讨论】:

    【解决方案6】:

    呃,这是一个五岁的孩子?

    类似这样的话怎么样:“我很想告诉你,但是这个数字太大了,要花很长时间才能说出来,我会在我告诉你之前死去”。

    【讨论】:

    • 如果可以的话+2。这是第一个真正解决问题的答案。
    • 我想知道死亡位,也许“睡前”或其他会更好
    • 不不不不不,如果这个孩子足够聪明,可以提出一个很好的问题,那么他或她不应该被告知一个可笑的傲慢的答案。孩子不傻,不要光顾他们。爸爸 - 你来到这里做了一件了不起的事情,我希望你能以某种方式来解释被接受的答案。
    【解决方案7】:

    如果您的硬盘驱动器为 1 TB(8'000'000'000'000 位),并且您将在纸上以十六进制数字打印适合它的数字(没有人会这样做,但让我们假设),那就是2,000,000,000,000 个十六进制数字。

    每页将包含 4000 个十六进制数字(40 x 100 位)。那是 500,000,000 页。

    现在将页面堆叠在一起(假设每页的厚度为 0.004 英寸/0.1 毫米),那么堆叠的高度将为 5 公里(约 3 英里)。

    【讨论】:

    • 你假设一个未压缩的整数表示。使用浮点你可以变得更大,压缩会让你更大!
    • 使用上面的公式,可以计算出其他设备(手机、iPod、电视等)的堆栈大小。但是网上很难查到号码。
    • +1 以获得视觉解释。我会使用 dec 而不是 hex。
    • 我想过用十进制代替十六进制,但公式太复杂了:-)
    【解决方案8】:

    这个问题实际上是一个非常有趣的问题,数学家已经投入了相当多的思考。您可以在 this article 中阅读它,这是一本引人入胜且易于阅读的文章。

    简而言之,一个名叫 Tibor Rado 的人开始通过定义一个称为 Busy Beaver 数字的序列来找到一些非常大但仍然定义明确的数字。他将 BB(n) 定义为任何图灵机在停止之前可以采取的最大步数,给定 n 个符号的输入。请注意,该序列本质上是不可计算,因此数字本身虽然定义明确,但很难确定。以下是前几个:

    BB(1) = 1
    BB(2) = 6
    BB(3) = 21
    BB(4) = 107
    

    ...等一下...

    BB(5) >= 8,690,333,381,690,951
    

    没有人确定 BB(5) 究竟有多大,但它是有限的。没有人知道BB(6)及以上有多大。但至少这些数字在数学上是完全明确的,不像“任何人类曾经想过的最大数字加一”。 ;)

    那么这个怎么样:

    计算机可以表示的最大数量是程序在停止前可以执行的小到足以容纳其可用内存的指令的最多。

    平方。

    不,等等,立方体。不,提升到自身的力量!

    该死的!

    【讨论】:

    • 这是一个很棒的文章链接。谢谢!
    • 这并不是真正的 n 个符号的输入集——这将是图灵机磁带上已经存在的符号。这里真正的意思是 10 个规则,图灵机的磁带头在对磁带执行计算时遵循这些规则。
    • 这个答案是一篇很棒的文章。
    【解决方案9】:

    我会尝试给出一个实际的答案。

    Common Lisp 数字处理功能特别强大。它有一个叫做“bignums”的东西,它是可以任意大的整数,受可用数量的限制。

    见:http://en.wikibooks.org/wiki/Common_Lisp/Advanced_topics/Numbers#Fixnums_and_Bignums

    【讨论】:

      【解决方案10】:

      生活的答案(还有这个孩子的问题):42

      【讨论】:

      • 这里唯一明智的答案
      【解决方案11】:

      取决于计算机可以处理多少。虽然有时计算机可以处理大于 (2^(bits-1)-1) 的数字...例如: 我的电脑是64位的(9223372036854775807),但是电脑自带的计算器最多可以处理10^9999的数字。

      许多其他超级计算机都可能超过这些限制,拥有最多内存(位)的超级计算机也可能是拥有记录(当前计算机可以保存的最大数量)的超级计算机。

      或者,如果要在计算机上直观地看到它,您可以编写一个程序,在监视器上重复写入 9,而不是跳过该行以形成一个不断增长的 9。:P

      【讨论】:

        【解决方案12】:

        对理论知之甚少,但据我所知,我从您的问题中了解到:计算机可以表示的最大数字是多少(我补充说:在合理的时间内,直到打印“9”地球将“被太阳吞噬”)。然后我让我的电脑进行一个简单的计算(用 PHP 或任何语言):echo pow(2,1023) - 结果:8.9884656743116E+307。所以我想这是我的电脑可以计算的最大数字。另一方面,我认为最大负数的表示可以是:-0,(0)1

        LE:该计算值是通过 PHP 获得的,但我试图找出我的 windows 计算器可以计算的最大数字是多少,它是 pow(2, 33219) = 8.2304951207588748764521361245002E+9999。现在我想这是我的 PC 可以处理的最大数量了。

        【讨论】:

          【解决方案13】:

          好吧,我今天早些时候也有同样的问题,所以想为什么不编写一些 c++ 代码来看看计算机会停在哪里...... 但是我的笔记本电脑不在课堂上,所以我用了另一个,这个数字很大但它永远不会结束,我会再运行一个晚上然后我会分享这个数字 你可以试试代码很笨

          #include <stdlib.h>
          #include <stdio.h>
          
          int main() {
              int i = 0;
          
              for (i = 0; i <= i; i++) {
                  printf("%i\n", i);
                  i++;
              }
          }
          

          让它一直运行直到它停止^^

          【讨论】:

          • 我们确切地知道它会停在哪里;对于 32 位系统,它将在 2,147,483,647 处停止,对于 64 位系统,它将在 9,223,372,036,854,775,807 处停止。整数有特定的限制,具体取决于 CPU 可以处理的位。
          【解决方案14】:

          我认为您应该为您 5 岁的孩子已经提出这样的问题而感到自豪。 你应该继续推广它!这真是太神奇了!话虽如此,我想说说 Infinity 并不 count 错误地考虑了数字在计算机内存中的含义。 我觉得这种思维方式是一种障碍。

          数学家永远无法写出 pi 或欧拉数的所有数字,但我们完全理解。 举例来说,Pi 完美地表示为无限这个系列:(Pi / 4) = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
          只是因为你真的不能去 inf。或在控制台中打印每个数字都没有任何意义。 您可以打印代表 pi 的符号并因此捕获 inf。系列。 计算机代数系统 (CAS) 一直象征性地表示数字。以 Pi 为例, 可能是内存中的符号对象(内存中的二进制文件并不直接表示数字。它表示用于产生任意精度答案的“数学算法”)。 然后你用它做一些数学运算,从一个表达式转换为下一个表达式。 我们在任何时候都没有完全代表这个数字。

          最后,你可以用这个做两件事:

          A) 评估表达式,将其转换为某种类型的数字(或矩阵或其他)。 但是这个数字很可能是一个近似值(比如 20 位 pi)。

          B) 保留其符号形式以供参考。显然我们不喜欢盯着符号,因为我们 最终需要打开设备上的旋钮。 注意:有时您可以获得一个在内存中完美表示的有限(非无理数)数字(如数字 1) 通过采取限制或去inf。不是字面上有一个inf。内存中的数字,但象征性地表示它。 只需将其放入 Wolfram alpha 中: Lim[Exp[-x], x --> Inf];它为您提供数字 0。这是精确的。

          简而言之:

          人类需要在内存中有一些二进制文件直接表示导致 要降级的数量。象征性地完美地表现了它。你可以设计一些算法 只是继续计算 pi 或欧拉数的下一位数字,为您提供任意数量的精度(现在,这显然是不切实际的)。

          我希望这至少对你有用或有趣,即使你不同意 =)

          【讨论】:

            【解决方案15】:

            继续 chrome 然后继续上面的三个点并单击它们然后继续工具然后继续开发工具点击控制台并输入 Number.MAX_VALUE

            【讨论】:

              猜你喜欢
              • 2015-02-25
              • 2012-02-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-31
              • 1970-01-01
              • 2013-10-08
              • 2019-07-02
              相关资源
              最近更新 更多