【ライタスの日常】資格勉強で学んだ「数の表現と誤差」の話

こんにちは。
ライタスの営業担当・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では符号部・指数部・仮数部で表現する
  • コンピューター計算では様々な誤差が発生する

普段はあまり意識しない部分ですが、 コンピューター内部ではこのような仕組みで数値が扱われていると知ると とても面白い分野だと感じました。

資格勉強は大変ですが、 少しずつ理解を積み重ねていきたいと思います。

それでは、今日はこのあたりで。
















































――――――――――――――
このブログは、ライタス株式会社のメンバーが 日々の業務や日常の中で感じたことを、 ゆるく綴っているブログです。
仕事の話から日常のちょっとしたことまで、 ライタスの雰囲気が少しでも伝われば嬉しいです。

――――――――――――――

#ライタスの日常

#資格勉強

#基本情報技術者

#数の表現

#学びのアウトプット




コメント

このブログの人気の投稿

Firefoxを起動したら、Couldn't load XPCOM. というエラーが出る時の対処法 | ライタス株式会社

Hyper-VゲストOS再起動にご注意 | ライタス株式会社

Outlookから送るとエラーになるのに、Office365のOnline Outlookで送ると大丈夫 | ライタス株式会社