• ベストアンサー

ゲームの桁数インフレついての話

最近、インフレが激しいスマホゲームで 「億」や「兆」どころか 「京」や「垓」 果てには「阿僧祇」や「那由多」、「不可思議」や「無量大数」 といった天文学的な数値が出てくるゲーム (最近だとテイペンウォーズやガンダムトライヴ等) をよく見るのですが、 「京」までならまだしも、無量大数といった 大きすぎる数値をどうやって出力(表示)させているのでしょうか? スマホの電卓ですら基本、億〜兆までで限界なのに。 ゲームプログラミングに詳しい人は どの言語であれば無量大数といった大きな値でも出力が可能なのか 教えていただけないでしょうか? もちろんだからってサンプルソースコードをここに載せろとは言いません。 需要あるかは分からないけど無量大数といった 大きな数値も出力できるプログラミング言語を知りたいだけなのです。 ゲーム関係であれば「C」や「C++」や「C#」、 「Unity」「Python」その他、何でも構いません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>大きすぎる数値をどうやって出力(表示)させているのでしょうか? 記憶できるメモリさえあればどうとでもなる。 メモリが足りなくても、外部記憶装置を「仮想メモリ」として扱えばどうとでもなる。 例えば、円周率は「1000兆桁」まで計算され、プリンタ等で印刷可能になっている。 京や垓など、たった16桁や20桁。メモリが10バイトもあれば足りる。 那由他、不可思議、無量大数であっても、60桁ちょっとで、メモリが30バイトちょっとあれば足りる。 そういう訳で、記憶領域さえ確保できれば「1000兆桁の計算と出力」も可能になる。

その他の回答 (2)

回答No.2

Pythonだと可能かね。 # 無量大数 >>> 10 ** 68 100000000000000000000000000000000000000000000000000000000000000000000 元々、このテの「デカイ数」でもヘーキで扱うのはLispって言語が得意だった。 ;; ANSI Common Lisp CL-USER> (expt 10 68) 100000000000000000000000000000000000000000000000000000000000000000000 昔のPythonじゃあ「無理だった」んだけど、3.xになってからLispに「追いついた」って事か。 他にLispを追っかけたのにRubyがある。 # Ruby irb(main):001:0> 10 ** 68 => 100000000000000000000000000000000000000000000000000000000000000000000 大体この辺の言語なら大丈夫かね。 Cとかだと現在の64ビット環境だと、符号なし整数(平たく言うと正の整数)だと2^64まで扱えるわけじゃん?十進数で最大値が18,446,744,073,709,551,616か。それが64bit一纏まりで扱える正の整数の最大値。 でも「一纏まり」で最大値が18,446,744,073,709,551,616なんで、「四纏まり」もあれば何とかなる(笑)。一纏まり毎に「桁溢れ」があるなら2つ目のメモリがあれば・・・とかやっていけば別に不可能ではないんだ。それはC++でもC#でも同じでさ。 例えばこんな方法論がある。 [C言語] 多倍長整数の演算を実装する方法 https://af-e.net/c-language-multiple-precision-arithmetic/ なお、本質的な問題としては、「無量大数といった大きな値」かどうか、ってのは関係ないんだ。単にCPUが想定してる「メモリひと塊」を超えるのかどうか、って話で。 例えば8bit CPUだと想定では符号なし整数の最大値は255なわけじゃん?じゃあ、500って言う数値が出力可能なのか否か・・・ってのと問題の本質はあまり変わらない。8bit CPUでも無量大数が出力可能かもしんないし・・・ただし、CPUにはプログラムカウンタ、ってのがあって、こいつが「扱えるメモリの最大量」を決定してて、それの量を超えた数値は表現出来ないよ、って事にはなるだろうけどね。 いずれにせよ、ファミコン時代で、ファミコンは当然8bit機なんだけど、255を超える数値が出てくる、なんてザラだったからね。「やりようによっては」どーにでもなる、って事だ。 写真: ファミコン版「ファイナル・ファンタジー」。 HPが380とか288とか、8bitで表せる符号付き整数の最大値、255を超えてるのが分かる。 持金も「16391」になってて、これも当然8bitで表せる符号付き整数の最大値を超えている。 結局、8bit CPUでも「想定された整数を超えた」整数を表示する事は可能だった。

回答No.1

ゲームで「京」や「無量大数」などの大きな数を扱うためには、任意精度演算(大きな数を精度良く計算する技術)を使う必要があるね。 大きな数を扱える言語 Python: int型は任意精度整数なので、大きな数もそのまま扱えるよ。 C++: GMPライブラリを使えば行けたはず。 Java: BigIntegerクラスを使おう。 C# (Unity): BigIntegerクラス(System.Numerics)を使うよ。 私的には視覚的に見やすいかと言われれば、垓や不可思議はわかりにくいなとは思う。

関連するQ&A

専門家に質問してみよう