ちょうど私の 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」とは異なります。;)
では、これはどうですか:
コンピューターが表現できる最大数は、使用可能なメモリに収まるほど小さいプログラムが停止する前に実行できる命令の最大数です。
四角い。
いいえ、待ってください。いいえ、それ自体の力で育てます!
くそっ!
ビットは数値ではありません。あなたはプログラマーとして、それらにあなたが望む意味、おそらく数字を与えます。
1
ここで、これは「人間がこれまでに考えた最大の数 + 1」を表していると判断しました。
えっと、これは5歳ですか?
「お話ししたいのですが、その数があまりにも多く、話すのに時間がかかりすぎてしまいます。言い終える前に死んでしまいます」.
// wait to see
for(;;)
{
printf("9");
}
だいたい2^AVAILABLE_MEMORY_IN_BITS
EDIT:上記は実際に数値を保存するためのもので、すべてのメディア(RAM、HD、クラウドなど)をメモリとして扱います。OS フットプリント (KB 単位で測定) を差し引いても、「大まかに」精度が低下することはありません...
意味のある方法で数値を「表現」したい場合は、CPU が提供するものを使用することをお勧めします。子供が接触するほとんどのコンピューターでは、符号なし 32 ビット整数 (約 4 ギグ) または符号なし 64 ビット整数です。 .
5 歳児と話す際の注意: 多くの場合、彼らは事実を知りたいだけです。4'294'967'295
. _ 次に、グレージングが彼の目から離れたら、コンピューターがどのように数値を表すかを説明して、どこまで理解できるかを試してみてください.
編集#2:私はかつてこの記事を読みました:誰があなたの子供に多くの興味深い情報を提供するはずのより大きな数に名前を付けることができます. 明らかに、彼はあなたの普通の 5 歳児ではありません。したがって、これにより、数値と計算についてクールな方向に進むことができます。
人生への答え (そしてこの子供たちの質問): 42
それは、それを表すために使用するデータ型によって異なります。コンピュータはビット (0/1) のみを格納します。私たちは開発者として、ビットに意味を与えます。(65 は数字または文字にすることができますA
)。
たとえば、1^N
N が符号なしで、任意のサイズのビット配列で表されるデータ型を定義できます。10^N
次の人は、私の最大数の 10 倍の数を思い付くことができます。
確かにギャップはありますが、必要がなければ問題ありません。
したがって、コンテキストがないため、質問は無意味です。
私は実際的な答えを出そうとします。
Common Lisp の数値演算は特に強力です。利用可能な量によって制限され、任意に大きくすることができる整数である「bignums」と呼ばれるものがあります。
参照: http://en.wikibooks.org/wiki/Common_Lisp/Advanced_topics/Numbers#Fixnums_and_Bignums
ハード ドライブが 1 TB (8'000'000'000'000 ビット) で、それに収まる数値を 16 進数として紙に印刷する場合 (誰もそうはしませんが、仮定しましょう)、それは 2,000,000,000,000 16 進数です。 .
各ページには 4000 桁の 16 進数 (40 x 100 桁) が含まれます。それは5億ページです。
ここでページを積み重ねると (各ページの厚さは 0.004 インチ / 0.1 mm としましょう)、スタックの高さは 5 km (約 3 マイル) になります。
サイズは、PC に挿入できるハード ドライブの合計サイズによって明らかに制限されます。結局のところ、すべてのディスク領域を占有するテキスト ファイルに数値を格納できます。
単純なボックスでも 4x2Tb ドライブを使用できるため、約 8Tb を使用できます。バイナリとして保存する場合、最大数は2 pow 64000000000000
です。
パソコンの処理能力次第です。コンピューターが (2^(bits-1)-1) より大きい数値を処理できる場合もありますが... 例: 私のコンピューターは 64 ビット (9223372036854775807) ですが、コンピューター自体に付属の電卓は処理できます10^9999 までの数字。
他の多くのスーパーコンピューターはこれらの制限を超える可能性があり、メモリ (ビット数) が最も多いスーパーコンピューターが記録 (コンピューターが保持できる現在の最大数) を持つ可能性があります。
または、コンピューターで視覚的に見ることになると、モニター上で9を繰り返し書き込み、その行をスキップせずに、増え続ける9の束を形成するプログラムを作成できます。:P