6月23日(水)1コマ目
今日、やったこと
誤差
今日のホワイトボード
オーバーフロー
C言語のchar型は1バイト、int型は4バイトのようにサイズが決まっている。
このサイズを超えるデータを代入すると、はみ出してしまいオーバーフローが発生する。
![]() |
| 図 オーバーフロー |
アンダーフロー
C言語のfloat型やdouble型は浮動小数点形式でデータを扱っている。
割り算をすると、仮数部がどんどん小さくなっていき、最終的に0になる。
が、ゼロになる直前までは正しい値。さらに割り算をすると仮数部がゼロになる。これがアンダーフロー。
float型やdouble型のような浮動小数点形式でデータを扱うさい、扱うことができる最小値よりも小さい値になったときにアンダーフローが発生する。さきほどのゼロはアンダーフローが発生した結果であって、正しい値ではない。
![]() |
| 図 アンダーフロー |
丸め誤差
C言語のfloat型やdouble型は浮動小数点形式でデータを扱っている。
float型の場合、仮数部は23ビット。よって、仮数部の小数点以下が23ケタを超える場合、23ケタに収めるために24ケタ目以下を切り捨てる必要がある。このとき、
- 24ケタ目を切り上げる
- 24ケタ目を切り下げる
の2つの選択肢がある。この処理が丸め処理。
丸め処理を行うことで発生する誤差が丸め誤差。
ちなみに、四捨五入も丸め処理の1つであり、四捨五入することで真値との誤差が発生する。この誤差も丸め誤差。
![]() |
| 図 丸め誤差 |
ケタ落ち
有効桁数が少なくなることで、真値から誤差が発生する。この誤差がケタ落ち誤差。
ケタ落ちは近い値同士の引き算の際に発生する。
情報落ち
計算をする際、2つの値の指数を合わせる。大きな値と小さな値の計算の場合、仮数の一部が切り取られてしまう。この誤差が情報落ち誤差。
大きさが極端に異なる値同士の計算をする際に発生する。
予告
そのうちテストします。
基本情報にこの辺の問題がちょこちょこ出題されています。
確認しておいてください。



コメント