代码之家  ›  专栏  ›  技术社区  ›  Yehonatan

计算机史上最大的数字

  •  34
  • Yehonatan  · 技术社区  · 14 年前

    刚被我5岁的孩子问到:电脑里最大的数字是多少?

    我们讨论的不是特定数据类型的最大数,而是计算机所能表示的最大数。

    不允许无穷大。

    更新我的孩子总是想打印为 要知道这是一个很大的数字。当然, 树不够。

    13 回复  |  直到 14 年前
        1
  •  44
  •   Tom Crockett    14 年前

    这个问题实际上是一个非常有趣的问题,数学家们对此进行了相当多的思考。你可以在报纸上看到 this article ,这是一本引人入胜的读物。

    简单地说,一个叫Tibor Rado的家伙开始通过定义一个称为Busy Beaver数的序列来寻找一些真正大的,但仍然定义良好的数。他定义了BB( 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)及以上有多大。但至少这些数字在数学上是完全明确定义的,不像“人类所能想到的最大数字,加上一。”;)

    那么这个怎么样:

    一台计算机所能代表的最大数字是一个小到足以容纳在其可用内存中的程序在停止前所能执行的指令的数量。

    方块字。

    该死!

        2
  •  34
  •   Alexandre C.    14 年前

    比特是 数字。 ,作为一个程序员,给他们你想要的含义,可能是数字。

    现在,我决定 1 代表“人类有史以来最大的一个数字加一”。

        3
  •  23
  •   Jaydee    14 年前

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

    可以这样说:“我很想告诉你,但这个数字太大了,要花很长时间才能说出来,我还没说完就死了。”。

        4
  •  20
  •   Tim Cooper    12 年前
    //  wait to see
    for(;;)
    {
        printf("9"); 
    }
    
        5
  •  13
  •   Daren Thomas    14 年前

    粗略地 2^AVAILABLE_MEMORY_IN_BITS

    编辑 :以上用于实际存储数字,并将所有媒体(RAM、HD、cloud等)视为内存。减去操作系统占用空间(以KB为单位)并不会使“粗略”的精确度降低。。。

    注意 4'294'967'295 . 然后,一旦玻璃离开他的眼睛,试着看看你能在多大程度上解释计算机如何代表数字。

    编辑#2: Who Can Name the Bigger Number

        6
  •  5
  •   WernerCD    14 年前

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

        7
  •  3
  •   Aaron Digulla    14 年前

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

    1^N 其中N是无符号的,由任意大小的位数组表示。下一个人可以想出 10^N 比我最大的数字大十倍。

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

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

        8
  •  1
  •   user151323 user151323    14 年前

    您甚至可以在一个简单的机箱中使用4x2Tb驱动器,因此大约有8Tb可用。如果存储为二进制,那么最大的数字是 2 pow 64000000000000 .

        9
  •  1
  •   Thomas Mueller    14 年前

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

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

        10
  •  1
  •   Joubert Nel    14 年前
        11
  •  1
  •   user3143076    11 年前

    LE:这个计算值是通过PHP得到的,但是我试图找出windows计算器能计算的最大值是多少,它是pow(233219)=8.23049512075887748764521361245002e+9999。现在我想这是我的电脑能处理的最大数量了。

        12
  •  1
  •   Christos Lytras    5 年前

    今天早些时候我也有同样的问题,所以我想为什么不做一点c++代码来看看电脑会停在哪里。。。

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

    让它一直跑到停下来^^

        13
  •  0
  •   TheThinkingManWhoDoesn'tThink    11 年前

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

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

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

        14
  •  0
  •   Tyler Heers    5 年前

    我想你应该为你5岁的孩子已经在问这样的问题而感到骄傲。 你应该继续宣传!这真是太棒了!话虽如此,我想说的是,说无限并不意味着 count错误地思考了数字在计算机内存中的含义。

    数学家永远无法写出π或欧勒数的所有数字,但我们完全理解它。
    您可以打印代表pi的符号,从而捕获inf.series。 可能是内存中的符号对象(内存中的二进制没有直接表示数字)。它代表了一种“数学算法”,用于生成任意精度的答案。 然后用它做一些数学运算,从一个表达式转换到下一个表达式。 我们在任何时候都不能完全代表这个数字。

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

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

    把这个放进Wolfram alpha:Lim[Exp[-x],x-->Inf];它会给你数字0。这是准确的。

    简而言之:

    要降级的数字。象征性地,它被完美地表现出来。你可以设计一些算法 只需继续计算pi或eulers数的下一位数,就可以得到任意精度(现在,这显然是不实际的)。