見出し画像

【検証】半巨大数が何か、AIに聞いてみました!!

人間には出来ない計算をやってくれるのがプログラミングです!!便利ですよね!ですが、そのプログラミングでも計算ができないときがあるの、知ってましたか???今回は、プログラミングでも計算できない世界について、深堀して調査してみました!!


1.計算限界はどこ?

Q. 計算限界の話が出たと思いますが、3^3^3^3が巨大数だとすると、半巨大数にあたる境界ゾーンはどのあたりですか?単純に半分にしても巨大数は巨大数だと思うので、概念としてです。何故巨大数の概念が生まれたのかも気になります。プログラミングで計算できるゾーン、計算できず辛うじて理論証明できるゾーン、その中間ゾーン、という分類になるのでしょうかね。無量大数レベルだとまだプログラミングで余裕で計算できるゾーンに該当するのでしょうか?

AI先生

巨大数の概念は、数学や計算理論において扱う数値の中で、通常の数では表現できないほど非常に大きな数を扱うために生まれました。以下にそれらの概念とその背後にある理由を説明します。

### 巨大数の概念

1. **定義と分類**:

- **巨大数**: 通常の表記法(例えば、指数表記)では表現できないほどの極めて大きな数。例としては、グラハム数や、`3↑↑↑↑3`(Knuthの矢印記法)のような数があります。
- **半巨大数の感覚**: 具体的な境界はありませんが、「通常の指数表記(例えば、10^100など)では表現可能だが理解や直感では把握しにくい」ものとして概念化されます。半巨大数はプログラムにより通常の計算でも扱える数の上限に近いところと考えられます。

2. **誕生の背景**:

- **数学的限界の挑戦**: 再帰や再帰関数に対して上限を超える挙動を示し、有限の時間内で直接計算が困難なため、数学的構造において仮定や理想を追求するためにうまれました。
- **計算理論の進展**: コンピュータの性能向上に伴い、できうる限界を拡張し、人間の考える速度、記述の簡潔性に挑戦します。

### プログラミングと巨大数

1. **計算可能なゾーン**:

- コンピュータの数値演算で直接扱える範囲(例えば、通常の整数や浮動小数点議論の域)で計算できる数です。
- 例として、64ビット整数(2^63-1)

2. **理論的処理区域**:

- 計算自体は直接実行不可能だが、構造的推定や間接的な方法で意味を持たせられる数。
- このような領域では、証明や数式の変換、あるいはシンボリック数学ソフトウェアの利用が一般的です。

3. **中間的な範囲**:

- 理論的には理解され、式や限定的式解析ができるが、直接数値計算するとリソースまたは精度限界を超える可能性がある域。
- この領域では、プログラムしたアルゴリズムが現実的に実行可能かどうかギリギリのところと思われます。

### 無量大数

- 実用的な大きさ(エントリープロフェッショナルなどが日常業務で使用する数値範囲)で、計算機の能力が追いついている範囲内です。通常のプログラミング言語や数値計算ソフトウェアで扱える範囲に相当しますが、非常に大規模なシミュレーション、解析目的では境界に達することがあるかもしれません。

巨大数やそれに近い形状の数は、通常の計算作業で用いるものではなく、理論的な枠組みや特殊な用途での適用が一般的とされていることを心得てください。それらの理解と実用は、数学的美学や計算理論の最前線における貢献を目指しています。

2.工夫したら限界はどこまで広がる?

Q. 10^100はでも、対数を使えばまだ余裕があると考えていいですかね?どんなに工夫しても厳しくなってくる限界はどこになるのでしょうか?

AI先生

`10^100`という大きさは、いわゆる「ゴーゴル」と呼ばれる数で、これは驚くほど大きな数ですが、計算数学や理論数学の分野では、依然として直感で理解できる範囲内にあります。このレベルの数は、数値計算が直接可能であり、特に数学的な枠組みや理論において扱うのには比較的余裕があるとされています。

※:ゴーゴルという数は、Googleの社名の由来です。

### 大きな数を扱う手法とその限界

1. **対数を利用した解析**:

- 対数を使うことで、非常に大きな数を扱う際に、その特性や性質をより直感的に理解することが可能になります。
- 特に、指数表記など大きな数を扱うとき、対数を用いて範囲や挙動を縮小し、解析を単純にすることができます。
- 対数を用いた解析は大きな数(ゴーゴル程度まで)が容易に比較や変換の対象になり得ることが多いです。

2. **通常の計算能力の限界**:

- 実用的な計算(特に精度重視やパフォーマンスに限界がある場合)では、数確度に限界がありますが、`10^100`はまだ実用範囲内です。
- ダブル精度浮動小数点数では、非常に詳細な数値(この範囲内)までも扱えます。

3. **より大きな限界**:

- 実用上の計算では、例えば`10^300`やそれ以上、特に`10^1000`などになると、処理が厳しくなることがあります。
- 符号付き整数や浮動小数点数のオーバーフローに至ることがあります。この場合、特別な数学ライブラリの使用が必要となることが多いです(多倍長計算等)。

4. **数学的限界の観点**:

- 理論的には、無限に近づく形式や関数によって限界を超える表現も可能ですが、これらは純粋に理論的な概念として位置付けられます。

### まとめ

`10^100`は依然として直接的な解析や処理を行う上では現実的範囲内であり、対数を通じてより大規模な分析も可能です。ただし、数の大きさが指数的に増すごとに、通常のコンピュータリソースが持つ能力を超えてくることがあります。このため、解析の目的と利用可能なリソースに応じて、最適な手法とツールを選択することが鍵です。

3.実際にどのように使われるの?

Q. 

3. **より大きな限界**:
- 実用上の計算では、例えば`10^300`やそれ以上、特に`10^1000`などになると、処理が厳しくなることがあります。
- 符号付き整数や浮動小数点数のオーバーフローに至ることがあります。この場合、特別な数学ライブラリの使用が必要となることが多いです(多倍長計算等)。

どんなライブラリですか?あと、実用例はありますか?

AI先生

非常に大きな数を扱う際に使用される特別な数学ライブラリとして、多倍長整数・浮動小数点計算用のライブラリがあります。これらのライブラリは、通常の数値型(符号付き整数や標準的な浮動小数点数)が扱える範囲を超える数値を処理するために設計されています。

### よく使われるライブラリ

1. **GMP(GNU Multiple Precision Arithmetic Library)**:

- 多倍長整数、浮動小数点数、有理数の計算をサポートするライブラリ。
- 効率的に非常に大きな数を操作可能。CやC++を含む多くの言語で使用可能。

2. **MPFR(Multiple Precision Floating-Point Reliable Library)**:

- GMPを基にした精密な浮動小数点演算をサポートするライブラリ。
- 浮動小数点数の計算に特化し、高度な精度を提供。

3. **Numpy**:

- Pythonでの科学計算に広く使われているライブラリ。大規模なデータセットや行列演算を効率的に行える。
- NumPy自体は多倍精度を直接サポートしていないが、設定次第で大規模計算を扱うことができる。

4. **SymPy**:

- 数式をシンボリックで取り扱うことができるPythonのライブラリ。
- 解析や数式の評価、微分積分などに用いられ、無限精度の計算が可能。

### 実用例

1. **暗号理論**:

- 巨大な数を扱う暗号処理や鍵生成において、指標として用いられる。非対称暗号法では非常に大きな整数を素因数分解する問題が基盤となり、これが計算基礎となる。

2. **科学研究**:

- 天文学や物理学など、非常に大きなまたは小さな量をシミュレーションする必要がある領域で使用。
- シミュレーション精度を向上するため、多倍精度計算が使われることが多い。

3. **フィナンシャルモデリング**:

- 高精度な数値計算が要求される金融モデルやリスク解析においても多倍精度の計算が役立つ。

4. **数学的厳密性の確保**:

- 研究および数式証明のプロセスにおいて、誤差の蓄積を回避するための多倍精度が使用される。

これらのライブラリを使用することで通常のプログラムでは達成できない高精度、かつ広範囲の数値操作を可能にし、計算の精密さと効率を一段と向上させることができます。

この記事が参加している募集

note限定で、みんなのフォトギャラリーに無償で大量の画像を順次UPする予定です!ですが、ペタバイトクラスで供給するとなると、容量が一杯になり、皆さんのサポートが必要となります!これからも画像をどんどん供給していくので、サポートをお願いします!