【ライタスの日常】資格勉強で学んだ「数の表現と誤差」の話
こんにちは。
ライタスの営業担当・Kです。
基本情報技術者試験の勉強を進める中で、今回は 「数の表現」と「誤差」について学びました。
普段私たちが扱っている数値も、コンピューターの中では 2進数のビット列として表現されています。
その表現方法にはいくつか種類があり、 さらに計算の過程で誤差が発生することがあります。
勉強した内容を整理も兼ねてまとめてみました。
数の表現
コンピューターでは数値を表現する方法として主に
- 固定小数点
- 浮動小数点
という2つの方法があります。
固定小数点
固定小数点とは、小数点の位置を固定して表現する方法です。
□□□□.□□□□
上桁を整数部、下桁を小数部として扱います。
□□□□□□□□.
のように整数を表すこともできます。
ただし固定小数点では
0.00000000001
のような桁が長い数値を表現するために 大量のビットが必要になってしまいます。
浮動小数点
そこで使われるのが浮動小数点です。
浮動小数点では小数点の位置をフレキシブルに設定します。
これはシフト演算を利用して表現します。
例
0.00000000001 ↓ 1.0 を14ビット右に論理シフト ↓ +1.0 × 2⁻¹⁴
このようにすることで、 非常に小さい数値や大きい数値を効率よく表現できます。
浮動小数点の表示形式
代表的な浮動小数点の形式がIEEE754(32ビット形式)です。
(1bit)
(8bit)
(23bit)
ルールは次の通りです。
ルール1
元の数を 1.xxx の形に正規化し、xxx部分を仮数とする。
ルール2
指数部はバイアス値127を加えた値を2進数で表現する。
例題
10進数 10.25 をIEEE754(32bit)で表す場合
10.25 = 1010.01 (2進数) = 1.01001 × 2³
(正規化)
符号部
0(正の数)
仮数部
01001・・・・0000
指数部
3 + 127 = 130 130 → 10000010
誤差とは
誤差とは、実際の数値とコンピューター内部で表現できる数値の間に生じたズレのことです。
① 桁あふれ誤差
コンピューターが扱える最大値/最小値を超えると発生します。
10進数300を8ビット2進数で表現する × → オーバーフロー 10進数3.5×10^-1000000 を8ビットで表現 × → アンダーフロー
② 情報落ち
絶対値の大きい値と小さい値を計算したとき、 小さい値の計算結果が反映されないことです。
③ 打切り誤差
計算処理を途中で打ち切ることで生じる誤差です。
10 ÷ 3 = 3.3333333...
無限小数を途中で止めることで誤差が生じます。
④ 桁落ち
絶対値が近い数値で差を求めたときに 有効桁数が減る現象です。
⑤ 丸め誤差
切り上げ・切り捨て・四捨五入によって生じる誤差です。
137.6 → 138
このように元の数値との差が生まれます。
まとめ
- コンピューターは数値を2進数で表現する
- 小数の表現には固定小数点と浮動小数点がある
- IEEE754では符号部・指数部・仮数部で表現する
- コンピューター計算では様々な誤差が発生する
普段はあまり意識しない部分ですが、 コンピューター内部ではこのような仕組みで数値が扱われていると知ると とても面白い分野だと感じました。
資格勉強は大変ですが、 少しずつ理解を積み重ねていきたいと思います。
それでは、今日はこのあたりで。
#ライタスの日常
#資格勉強
#基本情報技術者
#数の表現
#学びのアウトプット
.png)
.png)
.png)
コメント
コメントを投稿