1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

基本情報(小数点など)

Posted at

小数点に入ります。普段、小数点使っている気がしないですがこれを機に小数点大好きっこになりたいです。

コンピュータが数を表すやり方には次の2つの方法があるらしいです。

固定小数点数
固定小数点数は予め小数点の位置を決めてしまいます。

浮動小数点数
浮動小数点数は小数点の位置を可変にします。

詳しくみていきます。

固定小数点数

改めて固定小数点数とは、「ビット列のどの位置に小数点があるか」を暗黙的了解として
扱う表現方法です。

例えば「頭5ビットを整数にする」と決めるとします

00000.000
----- ---
整数部 小数部

「頭7ビットを整数にする」と決めるとすると

0000000.0
------- -
整数部     小数部

「最下位ビットの右側は小数点とする」と決めると

00000000.
--------
整数部

となります。

8ビットの固定小数点数であらわせる整数の範囲は、下記のようになります。

符号なし
00000000.

         2進数 10進数
最小  
     00000000     0
     00000001     1
        |         |
     11111110    254
     11111111    255
最大

nビットで表現できる範囲は
0 ~ 2ⁿ-1
符号あり
[+,-]0000000.


         2進数 10進数
最小  
     10000000   -128
     10000001   -127
        |         |
     00000000     0
        |         |
     01111110    126
     01111111    127
最大

nビットで表現できる範囲は
-2(n-1) ~ 2₍n-1) - 1

浮動小数点数

浮動小数点数は、指数表記を用いて数値を扱う表現方法となります。

指数表記とは
0.00025 → 000.25 * 10⁻³

±    0.25 *  10  ⁻³
符号  仮数    基数 指数

上記のような形式で数を表すのが指数表記となります。

コンピュータで扱うのは2進数のため、基数「2」となります。

±      m  *   2  e
符号  仮数    基数 指数

コンピュータは浮動小数点数として、残りの可変部分(符号、仮数、指数)の値を
ビットに割り当てて数を表現します。

- 0.1011 * 2 ⁻⁵

上記の数字で説明すると

-が符号
1011が仮数部
-5が指数部

となります。

浮動小数点数の正規化

以下の数があります

① 0.12345 * 10⁻⁴
② 0.012345 * 10⁻³

上記の仮数部を5桁の枠にはめ込んで保管しなければならないと
した時に、元の値を保持できるのは

①となります。

「指数と仮数の組み合わせ」には、いろんなパターンがあるようです。
ただ「限られたビット数の中でより多くの桁数を保持する」という制約があれば
なんでも良いというわけにはいきません。

0.012345 * 10⁻³ → 0.12345 * 10⁻⁴
0.00101  * 2⁻³  → 0.101 * 2⁻⁵

上記の操作を正規化と呼びます。

まとめ

小数点大好きっこになるために、明日はさらに深いところまでやります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?