6月29日(水)1コマ目
今日、やったこと ビットシフトで掛け算 誤差(オーバーフロー、アンダーフロー) 今日のホワイトボード ビットシフトで掛け算 2進数の場合、x2 n なら、nビット左シフト。 もし、2 n にならない場合は、(2 n1 +2 n2 +・・)のようにバラシて。 図 左シフトで掛け算 問4 5×6 = (4 + 1)×6 = (2 2 + 2 0 )×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になってしまう。