桁あふれ 【算術オーバーフロー】 arithmetic overflow
概要
桁あふれ(算術オーバーフロー)とは、数値の計算結果が、その格納領域に収まる範囲を超えること。実行時エラーが生じたり、誤った結果を返したり、メモリ上の隣接区域の内容を破壊してしまう場合がある。コンピュータ内部で数値データを格納するメインメモリ上の領域やCPU内部のレジスタは、一つの数値を決まったデータ量で表すようにできており、取り扱える数値の大きさや桁数に上限がある。
数値を計算した結果がこの上限を超え、正しく格納・表現できなくなってしまうことを「桁あふれ」という。例えば、1バイトの符号なし整数型は0から255までの整数を表現できるため、「150×2」という計算の結果を格納しようとすると上限を超えてしまい桁あふれとなる。
桁あふれが発生した際の対処方法として、例外を引き起こして例外処理ルーチンによって何らかの対処を行う場合、実行時エラーを出力してプログラムを停止する場合、表現可能な上限値を設定する場合、上限を超えたことを示す特殊な値を格納する場合、単に無視する場合などがある。
桁あふれを無視してそのまま処理を続行した場合、あふれた上位の桁が消滅して奇妙な値が計算結果となったり、メモリ領域上の隣接する無関係の区画にあふれた数値データの一部を書き込んで内容を破損させてしまうといった事象が起きる場合もある。
負数や浮動小数点数の場合
桁あふれが起きるかどうかは桁の大きさの問題であるため、符号付き整数の場合には負数の値が下限を超えた場合(絶対値の桁数が上限を超えた場合)にも発生する。また、浮動小数点の場合には指数部の大きさが上限値よりも大きくなった場合にそれ以上大きな値を表すことができず桁あふれとなる。
(2025.2.28更新)