6月29日(水)1コマ目
今日、やったこと
- ビットシフトで掛け算
- 誤差(オーバーフロー、アンダーフロー)
今日のホワイトボード
ビットシフトで掛け算
2進数の場合、x2nなら、nビット左シフト。
もし、2nにならない場合は、(2n1+2n2+・・)のようにバラシて。
図 左シフトで掛け算 |
問4
5×6 = (4 + 1)×6 = (22 + 20)×6 でも可。
図 左シフトで5×6 |
問5
ー7は絶対値7の2の補数で表す。
図 左シフトでー7×7① |
図 左シフトでー7×7② |
誤差
真値からの差が誤差。
コンピュータではやり方によっては誤差が発生します。
どんなときにどんな誤差が発生するかを把握しておいた方がいい。
オーバーフロー
たとえば、char型(unsigned char型も)ならビット長は1バイト(8ビット)。この範囲を超えると誤差が発生する。
サンプルプログラムでは1からどんどんインクリメント(+1)していくと、254、255の次は256ではなく、0になってしまう。これはオーバーフローが発生したため。
図 オーバーフロー |
アンダーフロー
整数型では発生しないが、実数型(float型、double型)で計算結果が最小値より小さくなる場合に発生する。
サンプルプログラムではfloat型の1.0を÷2(1ビット右シフト)して、さらに÷2してを繰り返す。
途中で突然0になってしまう。これはアンダーフローが発生したため。
図 アンダーフロー |
次回は
誤差の続きをやります。