Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オーバーフロー アンダーフロー

タグ: C++

オーバーフロー(算術オーバーフロー)とは、「値が表現可能な最大値を上回る」こと。
アンダーフローとは、「値が表現可能な最小値を下回る」こと。
では、そもそも「最大値」や「最小値」とは何か。

浮動小数点数に限って言えば、オーバーフローもアンダーフローも標準規格IEEE 754で定義されているので話は早い。
これによると、オーバーフローは「正負問わず無限大に等しく」、アンダーフローは「正負問わず0とその次の非正規化数(32ビット浮動小数点数なら±2の-150乗)の間を指す」となっている。
つまり最大値や最小値は「絶対値」で考えるわけだ。

それに対し、「整数アンダーフロー」は例えば8ビット符合付き整数型であれば「演算の結果が-128より小さくなること」を指す。
浮動小数点数のアンダーフローとは違い、絶対値ではない。
この考え方自体は std::numeric_limits::min() の戻り値にも通じるものがある。

が、「整数アンダーフロー」はむしろアンダーフローとは別の概念と捉えるべきだろう。
ややこしいし、少なくともC言語の規格では「整数アンダーフロー」を「アンダーフロー」とは呼ばず、IEEE 754同様「負のオーバーフロー」と呼んでいる(§5.1.2.3例6)。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/147-7feb91bc
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。