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になってしまう。これはアンダーフローが発生したため。

図 アンダーフロー


次回は

誤差の続きをやります。