【 固定小数点数 】
●符号なし整数のみの場合。
8ビット ・・・ 28 = 0 ~ 255
16ビット ・・・216 = 0 ~ 65,535
32ビット ・・・232 = 0 ~ 4,294,967,295
nビット ・・・2n = 0 ~ 2n
●符号つき整数のみの場合。負数は 2 の補数
8ビット ・・・ - 27 ~ 27 - 1 = - 128 ~ 127
16ビット ・・・ - 215 ~ 215 - 1 = - 32,768 ~ 32,767
32ビット ・・・ - 231 ~ 231 - 1 = - 2,147,483,648 ~ 2,147,483,647
nビット ・・・ - 2n-1 ~ 2n-1 - 1
元の数字を左右にシフトすることで、乗算や除算が可能になる。
左へ 1 ビットシフトすると元の数字を 2 倍したことになる。2 ビットシフトすると 22倍したことになる。
右へ 1 ビットシフトすると元の数字を 1/2 倍したことになる。2 ビットシフトすると 1/22倍したことになる。
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | = | 23 + 21 + 20 | = 11(10) | |
0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | = | 24 + 22 + 21 | = 11(10) × 2 | = 22(10) |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | = | 25 + 23 + 22 | = 11(10) × 22 | = 44(10) |
0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | = | 26 + 24 + 23 | = 11(10) × 23 | = 88(10) |
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | = | 27 + 25 + 24 | = 11(10) × 24 | = 176(10) |
【 論理シフト 】
論理シフトは単純にビットを右または左にずらすことです。
はみ出したビットは捨てます。足りないビットには 0 を補います。
【 算術シフト 】
算術シフトは、符号を考慮してビットをずらします。
左シフトの場合、先頭ビットは残してずらす、右の足りないビットには 0 を入れる。
右シフトの場合は、左の足りないビットは、元の先頭ビットと同じものを入れる。
算術シフトの負数は 2 の補数で表現する。
算術シフトは、左シフトでビットをずらすとき、あふれが生じる。あふれの判断は、
元の数が正数のとき、左シフトで 1 が消えたときあふれとなる。
元の数が負数のとき、左シフトで 0 が消えたときあふれとなる。
【 丸め誤差 】(仮数部で発生する誤差)
コンピュータでは、計算に利用するビットの桁数が決まっているので、計算する値がそのビット数をオーバーするため、ある桁数で、切り捨てや四捨五入をすることで誤差が生じる。その誤差を丸め誤差という。
10 進数の 0.2 を 2 進数になおすと、 0.0011001100110011… と無限小数になってしまう。
これを仮数部を 23 ビットで表すと、24 ビット以降が切り捨てられてしまう。
そのため、その 2 進数を元の 10 進数に戻しても、ぴったり 0.2 に戻らない。
これが丸め誤差になる。
【 けた落ち 】(仮数部で発生する誤差)
絶対値のほぼ等しい二つの数値を減算したときに、有効桁数が減少してしまうことをいう。
たとえば、0.1235 - 0.1234 = 0.0001になる。これを正規化すると、0.1 × 10-3になり、0.1235 と 0.1234は、本来有効桁数は 4 桁であったけれど、0.1 × 10-3は有効桁数は 1 桁になってしまう。
【 情報落ち 】(仮数部で発生する誤差)
絶対値の差が非常に大きな二つの数値の加減算を行う時に、絶対値の小さいほうの値が計算結果に反映しないために起こる誤差
たとえば、どちらも有効数字 3 桁の 0.123 × 106 + 0.124 × 10-6 を計算すると 123000 + 0.000000124 = 123000.000000124 = 0.123000000000124 × 106になる。
これを有効数字 3桁と考えると 0.123 × 106になり、0.124 × 10-6の値がなくなってしまう。
情報落ちをなるべく起こらないようにするには、計算を連続して行う場合に、絶対値の小さなものから順番に計算していくことで情報落ちを避けることができる。
【 打ち切り誤差 】
計算を途中で打ち切ることによって生じる誤差をいう
コンピューターで数式などの解を求める際に、計算を繰り返し実行させることで値を近似させるとき、ある一定時間を超えたところで演算は終了される。そのようにして得られた値と真の値との間に生じた誤差が、打ち切り誤差と呼ばれる。
【 オーバーフロー(あふれ) 】(指数部で発生する誤差)
絶対値の大きなもの同士の乗算で、桁数が足りなくなってしまうことをいう。
指数部での表現ができなくなってしまうこと。
【 アンダーフロー 】(指数部で発生する誤差)
絶対値の小さなもの同士(非常に 0 に近い)の乗算を行うことで、表現できなくなってしまうことをいう。
指数部での表現ができなくなってしまうこと。
www.it-shikaku.jp