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

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

2020-05-02 23:29:50 バージョン

オーバーフロー

おーばーふろー

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

曖昧さ回避

  1. 容器などから内容物が溢れること
  2. 1よりコンピュータの演算で数値が上限を超えること⇒本項で解説
  3. プログラミングでスタック( 逐次入出力が繰り返されるデータを一時的に貯えるためのデータ構造 )を利用し過ぎることで起きるエラースタックオーバーフロー
  4. アダルトゲームブランドの一つ。→overflow
  5. かいづか氏原作の成年コミック、及びそれを原作としたアニメ作品「おーばーふろぉ~挿れたら溢れる姉妹のキモチ~」。→おーばーふろぉ

概要

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

 コンピュータでは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に丸められる。

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

オーバーフローの一例

 特にゲームで見られるものを挙げる。ほかにも有名なものも存在するが、基本的に裏技仕様バグなどを使用することにより発生することが多い。

スーパーマリオブラザーズ

 このゲームは無限増殖が可能であるが、残機の数値が符号有りの8ビットで保有されるため、128を超えると負の数となりゲームオーバーとなる。ただし一部ではカンストする設定も存在する。

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

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

ドラゴンクエスト4

 カジノにおけるメダルの購入。詳細は延べないが大量購入すると異様な低額で購入可能となる場合がある。この裏技ファミリーコンピュータ版のみの仕様であり、数少ないユーザー有利のオーバーフローである。

ラ・ピュセル

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

関連タグ

コンピュータ プログラミング C言語

バグ 裏技 仕様 不具合 カンスト

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

問題を報告

0/3000

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

報告を送信しました