ピクシブ百科事典は2023年6月13日付でプライバシーポリシーを改定しました。改訂履歴

オーバーフローの編集履歴

2016-02-14 05:53:42 バージョン

オーバーフロー

おーばーふろー

オーバーフロー(Overflow)とは内容物が容器から溢れる様子である。

曖昧さ回避

  1. 容器などから内容物が溢れること
  2. 1よりコンピュータの演算で数値が上限を超えること⇒本項で解説
  3. プログラミングスタックを利用し過ぎることで起きるエラー、スタックオーバーフロー
  4. アダルトゲームブランドの一つ。→overflow

概要

数値演算を行う際に計算可能な範囲を超えてしまう事を指す。


コンピュータでは2進数8桁を1つのバイトとして扱うことになり、このバイトを組み合わせる事で大きな数値を表現することも可能になる。例えば1バイトであれば符号無しならば0~255、符号有りならば-128~127までの数値を表現することが出来る。例えば符号無しの1バイトで表現された2つの整数を足し合わせようとした際(以下、分かりやすいように全て10進数で表記する)にその答えが255以下であれば問題無く計算出来るのだが答えが255を超えてしまった場合は問題が起きる。例えば130+130を行うと1バイトでは255までしか表現することが出来ず、260という数値を正しく格納することが出来ない。具体的には別の数値を書き換えてしまう可能性があるし、この演算の答えを1バイトで表現するとしたら5と返ってくることになる。これがオーバーフローである。


また符号有りの場合であると+正の演算を行ったにも関わらずオーバーフローするとの答えが返ってくる場合がある。


当然ながら演算の答えを何かしらの用途に利用しようとした場合は予期せぬ動作をする場合もあるしオーバーフローしたことによって隣のバイトの数値が書き換えられてしまった場合はその演算だけでは済まない不具合を引き起こすことも十分に考えられる。


ゲームでもたまにオーバーフローという現象が起きる事があり、制作者の想定外、または対策不足が考えられる。どちらにせよプレイヤーにとってはあまり良い結果にならないことが多い。


「アンダーフロー」と「負のオーバーフロー」

「オーバーフロー」に似た言葉に「アンダーフロー」というものがあり、

しばしば数値が0未満になった時に値がマイナスから転じて多い数に変化することを指してアンダーフローと呼ばれてしまうことがあるが、

実は間違いで、この場合は「負のオーバーフロー」が正しい。

(結果が正の数でも負の数でも、桁数が上限を超えて溢れてしまうのがオーバーフローである)


本来の「アンダーフロー」とは、浮動小数点演算で絶対値があまりに小さくなったとき、指数表現出来なくなる現象を指す。

分かりやすく言うと、0.00000000……001のような少数が下の桁数を丸められて0にされてしまうような現象である。

単精度なら2の-129乗くらいで指数表現出来なくなり、0に丸められる。

これは絶対値の問題なので、値が正だろうが負だろうが関係ない。


オーバーフローの一例

ファイナルファンタジー6

魔力が高すぎる状態でアルテマなどの高威力の魔法を使うとダメージが極端に低くなる現象が起きる。ファイナルファンタジーシリーズではダメージ9999(一部例外有り)でカンストするが、内部ではしっかりとダメージ計算が行われているため一定ダメージを超えた時点でオーバーフローを起こすようである。リメイク版では修正されている。

ラ・ピュセル

アイテムのパラメータを強化して32767を超えると-32768になりパラメータがマイナスになる。32768というのが符号有り2進数の2バイトで表そうとすると-32768となる数値であるため起こる現象である。逆に-32768より低くした場合は32767になると思われる。リメイク版では修正されている。

関連タグ

コンピュータ プログラミング C言語 バグ カンスト


ブラックラビ(聖剣伝説3)...オーバーフローを利用することにより簡単に倒せる裏技がある。

問題を報告

0/3000

編集可能な部分に問題がある場合について 記事本文などに問題がある場合、ご自身での調整をお願いいたします。
問題のある行動が繰り返される場合、対象ユーザーのプロフィールページ内の「問題を報告」からご連絡ください。

報告を送信しました