刚刚被我 5 岁的孩子问:计算机中最大的数字是多少?
我们不是在谈论特定数据类型的最大数量,而是计算机可以表示的最大数量。
不允许无穷大。
更新我的孩子也总是想打印,所以假设计算机需要打印这个数字,孩子知道它是一个大数字。当然,实际上我们不会打印,因为没有足够的树。
刚刚被我 5 岁的孩子问:计算机中最大的数字是多少?
我们不是在谈论特定数据类型的最大数量,而是计算机可以表示的最大数量。
不允许无穷大。
更新我的孩子也总是想打印,所以假设计算机需要打印这个数字,孩子知道它是一个大数字。当然,实际上我们不会打印,因为没有足够的树。
这个问题实际上是一个非常有趣的问题,数学家已经投入了相当多的思考。您可以在这篇文章中了解它,这是一本引人入胜且易于阅读的文章。
简而言之,一个名叫 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)及以上有多大。但至少这些数字在数学上是完全明确的,不像“任何人类曾经想过的最大数字加一”。;)
那么这个怎么样:
计算机可以表示的最大数量是程序在停止之前可以执行的最多指令,该程序小到可以放入其可用内存中。
平方。
不,等等,立方体。不,提升到自身的力量!
该死!
位不是数字。你,作为一个程序员,给他们你想要的意义,可能是数字。
现在,我决定这1
代表“人类曾经想过的最大数字加一”。
Errr 这是一个五岁的孩子?
类似这样的事情怎么样:“我很想告诉你,但是这个数字太大了,要花很长时间才能说出来,我会在我告诉你之前死去”。
// wait to see
for(;;)
{
printf("9");
}
大致2^AVAILABLE_MEMORY_IN_BITS
编辑:以上内容用于实际存储数字并将所有媒体(RAM、HD、云等)视为内存。减去操作系统占用空间(以 KB 为单位)不会“大致”降低准确度……
如果您想以一种有意义的方式“表示”一个数字,那么您可能想要使用 CPU 提供的内容:无符号 32 位整数(大约 4 Gig)或无符号 64 位整数,适用于您孩子将接触的大多数计算机.
与 5 岁儿童交谈的注意事项:通常,他们只想要一个事实。给他一个非常大且非常准确的数字(很多位数),例如4'294'967'295
. 然后,一旦玻璃离开他的眼睛,试着看看你在解释计算机如何表示数字方面能走多远。
编辑#2:我曾经读过这篇文章:谁能说出更大的数字,它应该为您的孩子提供大量有趣的信息。显然他不是你正常的五岁孩子。所以这可能会让你在数字和计算方面开始一个很酷的方向。
生活的答案(和这个孩子的问题):42
这取决于您用来表示它的数据类型。计算机仅存储位 (0/1)。作为开发人员,我们赋予这些位意义。(65 可以是数字或字母A
)。
例如,我可以将我的数据类型定义为1^N
其中 N 是无符号的并由任意大小的位数组表示。下一个人可以想出10^N
比我最大的数字大十倍的数字。
当然,会有差距,但如果你不需要它们,那没关系。
因此,这个问题没有意义,因为它没有上下文。
好吧,今天早些时候我也有同样的问题,所以想为什么不编写一些 C++ 代码来看看计算机会停在哪里......但是我的笔记本电脑不在课堂上,所以我使用了另一个,那么这个数字是大,但它永远不会结束,我会再运行一个晚上然后我会分享你可以尝试的数字代码是愚蠢的
#include <stdlib.h>
#include <stdio.h>
int main() {
int i = 0;
for (i = 0; i <= i; i++) {
printf("%i\n", i);
i++;
}
}
让它一直运行直到它停止^^
大小显然会受到您设法放入 PC 中的硬盘驱动器总大小的限制。毕竟,您可以将数字存储在占用所有磁盘空间的文本文件中。
即使在一个简单的盒子中,您也可以拥有 4x2Tb 驱动器,因此可用容量约为 8Tb。如果你存储为二进制,那么最大的数字是2 pow 64000000000000
.
如果您的硬盘驱动器为 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 英里)。
我会尝试给出一个实际的答案。
Common Lisp 数字运算特别强大。它有一个叫做“bignums”的东西,它是可以任意大的整数,受可用数量的限制。
请参阅:http ://en.wikibooks.org/wiki/Common_Lisp/Advanced_topics/Numbers#Fixnums_and_Bignums
对理论知之甚少,但据我所知,我从您的问题中了解到:计算机可以表示的最大数字是多少(我补充说:在合理的时间内,直到地球将不会打印“9” “被太阳吃掉”)。然后我让我的电脑进行一个简单的计算(使用 PHP 或任何语言):echo pow(2,1023) - 结果:8.9884656743116E+307。所以我想这是我的电脑可以计算的最大数字。另一方面,我认为最大负数的表示可以是:-0,(0)1
LE:该计算值是通过 PHP 获得的,但我试图找出我的 windows 计算器可以计算的最大数字是多少,它是 pow(2, 33219) = 8.2304951207588748764521361245002E+9999。现在我想这是我的电脑可以处理的最大数量。
取决于电脑能处理多少。虽然有些时候电脑可以处理大于(2^(bits-1)-1)的数字...例如:我的电脑是64位的(9223372036854775807),但是电脑自带的计算器可以处理高达 10^9999 的数字。
许多其他超级计算机可能会超过这些限制,而拥有最多内存(位)的超级计算机也可能是拥有记录(当前计算机可以保存的最大数量)的超级计算机。
或者,如果要在计算机上直观地看到它,您可以编写一个程序,在监视器上重复写入 9,而不是跳过该行以形成一个不断增长的 9。:P
我认为你应该为你 5 岁的孩子已经在问这样的问题感到非常自豪。你应该继续推广它!这真是太神奇了!话虽如此,我想说说 Infinity 不算数是错误地思考数字在计算机内存中的含义。我觉得这种思维方式是一种障碍。
数学家永远无法写出 pi 或欧拉数的所有数字,但我们完全理解它。举例来说,Pi 完美地表示为无限这个系列: (Pi / 4) = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...<br> 只是因为你真的不能去到 inf。或在控制台中打印每个数字都没有任何意义。您可以打印代表 pi 的符号并因此捕获 inf。系列。计算机代数系统 (CAS) 一直象征性地表示数字。例如,Pi 可能是内存中的符号对象(内存中的二进制文件并不直接表示数字。它表示用于产生任意精度答案的“数学算法”)。然后你用它做一些数学运算,从一个表达式转换为下一个表达式。我们在任何时候都没有完全代表这个数字。
最后,你可以用这个做两件事:
A)评估表达式,将其转换为某种类型的数字(或矩阵或其他)。但是这个数字很可能是一个近似值(比如 20 位 pi)。
B) 保留其符号形式以供参考。显然我们不喜欢盯着符号看,因为我们最终需要打开设备上的旋钮。注意:有时您可以通过限制或转到 inf 来获得在内存中完美表示的有限(非无理数)数(如数字 1)。不是字面上有一个inf。内存中的数字,但象征性地表示它。只需将其放入 Wolfram alpha 中: Lim[Exp[-x], x --> Inf]; 它为您提供数字 0。这是精确的。
简而言之:
人类需要在内存中有一些二进制文件直接表示导致数字降级的数字。象征性地完美地表现了它。您可以设计一些算法来继续计算 pi 或欧拉数的下一位数字,从而为您提供任意数量的精度(现在,这显然是不切实际的)。
我希望这至少对您有用或有趣,即使您不同意 =)
继续 chrome 然后继续上面的三个点并单击它们然后继续工具然后继续开发工具点击控制台并输入 Number.MAX_VALUE