この記事でのバージョン
Unity 6000.3.2f1
はじめに
Unity(C#)で整数値を扱う場合、基本的にはintを使いますが、
あまりに扱える範囲を超えてしまうとオーバーフローが発生してしまいます。
int max = int.MaxValue;//intの最大値を入れる int max_1 = max + 1;//最大をこえてるのでオーバーフローしてマイナスになる Debug.Log($"int.MaxValue = {max}"); Debug.Log($"int.MaxValue + 1 = {max_1}");
![]() |
intよりさらに大きな桁を扱えるlongもありますが、
今回はさらにそれ以上大きな桁を扱い時に使えるBigIntegerの紹介です!
BigInteger
BigIntegerはintやlongと違い、必要に応じて内部表現を拡張するため、
なんと桁数に上限がありません。(メモリや処理時間の制約で実質的な上限はある)
使い方は以下のような感じで生成時は文字列から生成するのが定番ですが、
それ以外はintやlongなど同じように使えます。
using System.Numerics;//BigIntegerを使うのに必要
//intでは表現できない桁の数(文字列から生成するのが定番) BigInteger big = BigInteger.Parse("99999999999999999999999999999999999999"); Debug.Log($"big = {big}"); //さらに計算もできる(桁が増える) BigInteger big2 = big * 123456789; Debug.Log($"big2 = {big2}"); // intだとこういう値はそもそも格納できない(コンパイルエラーになる) // int n = 999999999999999999; //エラー
![]() |
ただし、BigIntegerは桁が増えるほど計算が多くなるため、場合によっては加算ですら重くなります。
なので、Updateで短時間に何度も計算するような使い方には不向きです。
また、Unityのシリアライズにも対応してないためInspectorに表示する事は出来ません。
なので、保存したい時はstringに変換し、そこから復元して使うような運用になるかと思います。
こんな感じで、巨大な桁が扱えるものの使い勝手が良いわけではないので、
longでも足りず、他の表現方法も厳しい、どうしても巨大な整数を表現したい時だけ使う感じになります

