■負の数の計算
2進数の計算において、マイナスの演算をする際は、2の補数を使います。
たとえば、1001(=9)という値において
・ビットを反転させる 0110 ←1の補数
・それに1を加える 0111 ←2の補数
では、1100(=12)から1001(=9)を引いてみましょう。
1100+0111=0011(=3)※先頭であふれた1は、捨てられます。
■固定小数点数
・固定小数点数とは、小数点の位置を固定した数。(たとえば、16ビットにおいて、一番右端とか、8ビット目か)
ただ、これが以外に桁数の効率が悪い。
たとえば、16ビットにおいて小数点を8ビットの終わりに固定すると、整数部は2の8乗しか設定できない
⇔浮動小数点数
■浮動小数点
・コンピュータでは、浮動小数点を使う。
たとえば、1.2×10の30乗とか。
ここで、1.2が仮数、10が基数、30を指数と言います。
上記は、固定小数点数では表現できない大きな数を表現できますね。(ただ、誤差がでますが)
参考ですが、C言語の場合、以下です。
・単精度浮動小数点数(32ビット)はfloat
・倍精度浮動小数点数(64ビット)はdouble
・正規化
1.2×10の30乗は、12.0×10の29乗や120×10の28乗、0.12×10の31乗と表現することも可能です。統一した方がいいので、仮数の整数部は常に0以外の1桁にします(実際には、1にします)。このように、桁合わせをすることを正規化と言います。
※また、指数部は2進数、基数は2です。
過去問(H29春FE)
問2 0以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が0 以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。
ア 切上げ イ 切捨て ウ 桁上げ エ 正規化
→正解はエ
■IEEE754による浮動小数点の標準規格
H27秋FE午前問2に詳しい解説があります。
32ビット単精度浮動小数点形式の表現(単精度表現)では、符号部1ビット、指数部8ビット、仮数部23ビット
です。また、仮数の整数部は常に1なので、表現する必要が無い。数ビット得する。←ケチ表現
※単精度は32ビット、倍精度は倍の64ビットで表現されます。倍精度の方が正確ですが、もちろん処理には時間がかかります。
・指数部はゲタバキ表現を使う。127(=1000000)を加える。こうすることで、マイナスの指数も表現できる。
たとえば、0.625を単数度表現してみましょう。
0.625=α×2のβ乗で表現されます。
まず、0.625は2進数で0.101です。
0.101×2の0乗 = 1.01×2の-1乗(2倍すると、桁が一つ繰り上がる)
指数部は1ですが、ゲタバキなので、127を足すと、126になります。2進数では、1111110(=01111110)です。これを16進数にするには、4ビットずつ区切ればいいので、0111(=7)、1110(=E)で、7Eです。
2進数の計算において、マイナスの演算をする際は、2の補数を使います。
たとえば、1001(=9)という値において
・ビットを反転させる 0110 ←1の補数
・それに1を加える 0111 ←2の補数
では、1100(=12)から1001(=9)を引いてみましょう。
1100+0111=0011(=3)※先頭であふれた1は、捨てられます。
■固定小数点数
・固定小数点数とは、小数点の位置を固定した数。(たとえば、16ビットにおいて、一番右端とか、8ビット目か)
ただ、これが以外に桁数の効率が悪い。
たとえば、16ビットにおいて小数点を8ビットの終わりに固定すると、整数部は2の8乗しか設定できない
⇔浮動小数点数
■浮動小数点
・コンピュータでは、浮動小数点を使う。
たとえば、1.2×10の30乗とか。
ここで、1.2が仮数、10が基数、30を指数と言います。
上記は、固定小数点数では表現できない大きな数を表現できますね。(ただ、誤差がでますが)
参考ですが、C言語の場合、以下です。
・単精度浮動小数点数(32ビット)はfloat
・倍精度浮動小数点数(64ビット)はdouble
・正規化
1.2×10の30乗は、12.0×10の29乗や120×10の28乗、0.12×10の31乗と表現することも可能です。統一した方がいいので、仮数の整数部は常に0以外の1桁にします(実際には、1にします)。このように、桁合わせをすることを正規化と言います。
※また、指数部は2進数、基数は2です。
過去問(H29春FE)
問2 0以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が0 以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。
ア 切上げ イ 切捨て ウ 桁上げ エ 正規化
→正解はエ
■IEEE754による浮動小数点の標準規格
H27秋FE午前問2に詳しい解説があります。
32ビット単精度浮動小数点形式の表現(単精度表現)では、符号部1ビット、指数部8ビット、仮数部23ビット
です。また、仮数の整数部は常に1なので、表現する必要が無い。数ビット得する。←ケチ表現
※単精度は32ビット、倍精度は倍の64ビットで表現されます。倍精度の方が正確ですが、もちろん処理には時間がかかります。
・指数部はゲタバキ表現を使う。127(=1000000)を加える。こうすることで、マイナスの指数も表現できる。
たとえば、0.625を単数度表現してみましょう。
0.625=α×2のβ乗で表現されます。
まず、0.625は2進数で0.101です。
0.101×2の0乗 = 1.01×2の-1乗(2倍すると、桁が一つ繰り上がる)
指数部は1ですが、ゲタバキなので、127を足すと、126になります。2進数では、1111110(=01111110)です。これを16進数にするには、4ビットずつ区切ればいいので、0111(=7)、1110(=E)で、7Eです。
コメント