web-dev-qa-db-ja.com

コンピューター史上最大の数

私の5歳の子供から尋ねられたばかりです:コンピューターの最大数はいくつですか?

特定のデータ型の最大数については話していませんが、コンピューターが表すことができる最大数について話します。

無限大は許可されていません。

UPDATE私の子供はいつも同様に印刷したいので、コンピュータがこの番号を印刷する必要があり、子供がその大きな番号であることを知る必要があるとしましょう。もちろん、実際には十分な木がないため、印刷は行いません。

34
Yehonatan

この質問は、実際には数学者がかなりの考えを注いだ非常に興味深い質問です。あなたはそれについて この記事 で読むことができます、それは魅力的でアクセス可能な読み物です。

簡単に言うと、Tibor Radoという名前の男が、ビジービーバー番号と呼ばれるシーケンスを定義することによって、非常に大きな、しかしまだ明確に定義された番号を見つけようと試みました。彼は、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を加えた数」とは異なり、数学的に完全に明確に定義されています。 ;)

では、これはどうですか?

コンピュータが表すことができる最大の数は、プログラムが停止する前に実行できる、使用可能なメモリに収まるほど小さいプログラムの最大数です。

二乗。

いいえ、待ってください。いいえ、それ自体の力に引き上げられました!

くそー!

42
Tom Crockett

ビットはnot数字です。 Yoプログラマーとして、あなたが望む意味、おそらく数字を彼らに与えてください。

今、私は1は「人間がこれまでに考えた最大の数プラス1」を表します。

33
Alexandre C.

えーと、これは5歳ですか?

「お話ししたいのですが、その数が多すぎて、言うのに時間がかかります。お話しが終わる前に死んでしまいます」という言葉はどうでしょうか。

21
Jaydee
//  wait to see
for(;;)
{
    printf("9"); 
}
19
Hernán Eche

おおよそ2^AVAILABLE_MEMORY_IN_BITS

[〜#〜] edit [〜#〜]:上記は実際に数値を保存するためのものであり、すべてのメディア(RAM、HD、クラウドなど)を扱います。 )メモリとして。 OSフットプリント(KBで測定)を差し引いても、「大まかに」精度が低下することはありません...

意味のある方法で数値を「表現」したい場合は、CPUが提供するもの、つまり、子供が接触するほとんどのコンピューターの符号なし32ビット整数(約4ギガ)または符号なし64ビット整数を使用することをお勧めします。 。

[〜#〜]注[〜#〜]5歳の子供と話す場合:多くの場合、彼らはファクトイドを望んでいます。 4'294'967'295のように、彼に非常に大きくて非常に正確な数字(たくさんの数字)を与えます。次に、グレージングが彼の目を離れたら、コンピュータが数字をどのように表すかを説明することで、どこまで到達できるかを確認してください。

編集#2:私は一度この記事を読みました:誰がより大きな番号に名前を付けることができますかそれはあなたの子供にたくさんの興味深い情報を提供するはずです。明らかに、彼はあなたの通常の5歳ではありません。したがって、これにより、数値と計算についてクールな方向に進むことができます。

13
Daren Thomas

人生への答え(そしてこの子供たちの質問):42

5
WernerCD

これは、それを表すために使用するデータ型によって異なります。コンピュータはビット(0/1)のみを格納します。私たちは開発者として、ビットに意味を与えます。 (65は数字または文字Aにすることができます)。

たとえば、データ型を1^Nとして定義できます。ここで、Nは符号なしで、任意のサイズのビットの配列で表されます。次の人は10^Nを思い付くことができます。これは私の最大数の10倍になります。

確かに、ギャップがあるでしょうが、あなたがそれらを必要としないのであれば、それは問題ではありません。

したがって、コンテキストがないため、質問は無意味です。

3
Aaron Digulla

ハードドライブが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マイル)になります。

1
Thomas Mueller

サイズは明らかに、PCに入れることができるハードドライブの合計サイズによって制限されます。結局のところ、すべてのディスク領域を占めるテキストファイルに数値を保存できます。

シンプルなボックスでも4x2Tbドライブを使用できるため、約8Tbを使用できます。バイナリとして保存する場合、最大数は2 pow 64000000000000です。

1
user151323

理論についてはよくわかりませんが、あなたの質問から私が理解した限りでは、コンピューターが表すことができる最大の数は何ですか(そして私は追加します:妥当な時間内に、地球が「太陽に食べられる」)。そして、PCを使って1つの簡単な計算を行います(PHPまたは任意の言語):echo pow(2,1023)-結果:8.9884656743116E +307。したがって、これが最大の数値だと思います私のPCが計算できることです。反対側では、最大の負の数の表現は次のようになると思います:-0、(0)1

LE:その計算値はPHPを介して取得されましたが、Windows計算機が計算できる最大の数値を見つけようとしました。これは、pow(2、33219)= 8.2304951207588748764521361245002E +9999です。これが私のPCが処理できる最大の数だと思います。

1
user3143076

実用的な答えを出そうと思います。

一般的なLISP番号の処理は特に強力です。 「bignums」と呼ばれるものがあります。これは、使用可能な量によって制限され、任意に大きくできる整数です。

参照: http://en.wikibooks.org/wiki/Common_LISP/Advanced_topics/Numbers#Fixnums_and_Bignums

1
Joubert Nel

あなたの5歳の子供がすでにこのような質問をしていることを非常に誇りに思うべきだと思います。そして、あなたはそれを促進し続けるべきです!これは本当に素晴らしいです!そうは言っても、Infinityがカウントされないと言うことは、コンピュータメモリ内の数値が何を意味するかについて誤って考えていると言えます。この考え方はハンディキャップのように感じます。

数学者が円周率やオイラー数のすべての桁を書き出すことは決してできませんが、私たちはそれを完全に理解しています。例として、円周率はこのシリーズの無限大で完全に表されます:(Pi/4)= 1 --1/3 + 1/5 --1/7 + 1/9-…
文字通りinfに行けないからです。または、コンソールで1桁ごとに印刷しても意味がありません。円周率を表す記号を印刷して、infをキャプチャすることもできます。シリーズ。数式処理システム(CAS)は、常に数字を象徴的に表します。たとえば、円周率はメモリ内のシンボリックオブジェクトである可能性があります(メモリ内のバイナリは数値を直接表していませんでした。任意精度の答えを生成するための「数学アルゴリズム」を表します)。次に、それを使っていくつかの計算を行い、ある式から次の式に変換します。どの時点でも、私たちは完全に数を表していない。

最後に、これで2つのことができます。

A)式を評価し、それをある種の数(または行列など)に変換します。しかし、この数値は概算である可能性があります(たとえば、円周率の20桁など)。

B)参照用に記号形式で保管してください。明らかに、私たちは最終的に装置のノブを回す必要があるため、シンボルを見つめるのは好きではありません。注:制限を適用するか、infに移動することで、メモリ内で完全に表される有限の(非合理的な)数値(数値1など)を取得できる場合があります。文字通りinfを持っていません。メモリ内の番号ですが、それを象徴的に表しています。これをWolframalphaに投げるだけです:Lim [Exp [-x]、x-> Inf];それはあなたに数0を与えます。それは正確です。

要するに:

数が減少する原因となった数を直接表すのは、HUMANSがメモリにバイナリを持っている必要があるということでした。象徴的にそれは完全に表現されました。円周率またはオイラー数の次の桁を計算し続けるアルゴリズムを設計して、任意の精度を得ることができます(もちろん、これは明らかに実用的ではありません)。

同意できない場合でも、これが少なくともある程度有用または興味深いものであったことを願っています=)

0
Tyler Heers

さて、私は今日の初めに同じ質問をしたので、コンピュータがどこで停止するかを確認するために小さなc ++コードを作成しないのはなぜかと思いました...しかし、私のラップトップはクラスで私と一緒にいなかったので、別のものを使用しました。大きいですが、終わらないので、もう一度実行してから、コードを試すことができる番号を共有します。

#include <stdlib.h>
#include <stdio.h>

int main() {
    int i = 0;

    for (i = 0; i <= i; i++) {
        printf("%i\n", i);
        i++;
    }
}

そして止まるまで走らせてください^^

0

コンピュータが処理できる量によって異なります。コンピューターが(2 ^(bits-1)-1)より大きい数値を処理できる場合もありますが、例:私のコンピューターは64ビット(9223372036854775807)ですが、コンピューターに付属の計算機は処理できます。最大10 ^ 9999の数。

他の多くのスーパーコンピューターはこれらの制限を超える可能性があり、メモリ(ビット)が最も多いスーパーコンピューターは、レコード(コンピューターが保持できる現在の最大数)を持つスーパーコンピューターである可能性もあります。

または、コンピューターで視覚的に確認する場合は、モニター上で9の書き込みを繰り返し、その行をスキップせずに9の増加を続けるプログラムを作成できます。:P