曖昧さ回避
概要
数値演算を行う際に計算可能な範囲を超えてしまう事を指す。対義語はアンダーフロー。
コンピュータでは2進数8桁を1つのバイトとして扱うことになり、このバイトを組み合わせる事で大きな数値を表現することも可能になる。例えば1バイトであれば符号無しならば0~255、符号有りならば-128~127までの数値を表現することが出来る。例えば符号無しの1バイトで表現された2つの整数を足し合わせようとした際(以下、分かりやすいように全て10進数で表記する)にその答えが255以下であれば問題無く計算出来るのだが答えが255を超えてしまった場合は問題が起きる。例えば130+130を行うと1バイトでは255までしか表現することが出来ず、260という数値を正しく格納することが出来ない。具体的には別の数値を書き換えてしまう可能性があるし、この演算の答えを1バイトで表現するとしたら5と返ってくることになる。これがオーバーフローである。
また符号有りの場合であると正+正の演算を行ったにも関わらずオーバーフローすると負の答えが返ってくる場合がある。
当然ながら演算の答えを何かしらの用途に利用しようとした場合は予期せぬ動作をする場合もあるしオーバーフローしたことによって隣のバイトの数値が書き換えられてしまった場合はその演算だけでは済まない不具合を引き起こすことも十分に考えられる。
ゲームでもたまにオーバーフローという現象が起きる事があり、制作者の想定外、または対策不足が考えられる。どちらにせよプレイヤーにとってはあまり良い結果にならないことが多い。
オーバーフローの一例
ファイナルファンタジー6
魔力が高すぎる状態でアルテマなどの高威力の魔法を使うとダメージが極端に低くなる現象が起きる。ファイナルファンタジーシリーズではダメージは9999(一部例外有り)でカンストするが、内部ではしっかりとダメージ計算が行われているため一定ダメージを超えた時点でオーバーフローを起こすようである。リメイク版では修正されている。
ラ・ピュセル
アイテムのパラメータを強化して32767を超えると-32768になりパラメータがマイナスになる。32768というのが符号有り2進数の2バイトで表そうとすると-32768となる数値であるため起こる現象である。逆に-32768より低くした場合は32767になると思われる。リメイク版では修正されている。