こんにちは、コンスキです。
「10進数をIEEE754単精度で表現せよ」もしくは、「10進数をIEEE754単精度に変換せよ」という問題の解き方をご紹介します。
今回は例として、-85.125という10進数をIEEE754単精度で表現する過程を取り上げてみます。
浮動小数点数表示の構成(32ビット)
0か1が入る1桁のことを1ビットと呼びます。
32ビットの浮動小数点表示は、次のような構成になります。
![](https://konsuki.com/wp-content/uploads/2021/10/image-61.png)
なぜこの構成になっているのか、最初は謎ですよね。
1度解いてみましょう。なんとなく分かると思います!
大まかな解き方
大まかな計算手順は次の3ステップです。
- 仮数部の符号を求める
- 仮数部mを求める
- 指数部eを求める
詳しい解き方
例として、-85.125という10進数をIEEE754単精度で表現していきます。
手順1. 仮数部の符号を求める
![](https://konsuki.com/wp-content/uploads/2021/10/image-62.png)
仮数部の符号は、10進数が正なら「0」で、負なら「1」です。
-85.125は負であるため、仮数部の符号は「1」になります。
![](https://konsuki.com/wp-content/uploads/2021/10/image-90.png)
手順2. 指数部eを求める
![](https://konsuki.com/wp-content/uploads/2021/10/image-98.png)
まず、10進数を2進数にします。
10進数に「-(マイナス)」が付いている場合は、「-」を取った後に2進数にします。
![](https://konsuki.com/wp-content/uploads/2021/10/image-73.png)
整数部分から2進数にします。
![](https://konsuki.com/wp-content/uploads/2021/10/image-84.png)
次に小数点以下を2進数にします。
![](https://konsuki.com/wp-content/uploads/2021/10/image-85.png)
整数部分と小数点以下を合体します。
![](https://konsuki.com/wp-content/uploads/2021/10/image-87.png)
その2進数を正規化します。(正規化:111を1.11×22に直すような作業)
![](https://konsuki.com/wp-content/uploads/2021/10/image-89-1024x142.png)
2の右肩にある数字に、バイアス値の127を足した値を求めます。
1.010101001×26において、2の右肩にある数字は6
6 + 127 = 133
この133を2進数にします。
![](https://konsuki.com/wp-content/uploads/2021/10/image-96.png)
この「10000101」が指数部eです。
![](https://konsuki.com/wp-content/uploads/2021/10/image-99.png)
手順3. 仮数部mを求める
![](https://konsuki.com/wp-content/uploads/2021/10/image-100-1024x170.png)
先ほどの正規化した2進数に注目します。
小数点とその左にある1、そして×2Eの部分を省略します。
![](https://konsuki.com/wp-content/uploads/2021/10/image-101-1024x174.png)
この「010101001」を仮数部に入れます。
この時、左側に詰めて入れることに注意してください。
![](https://konsuki.com/wp-content/uploads/2021/10/image-102.png)
仮数部の空いている部分に0を入れます。
![](https://konsuki.com/wp-content/uploads/2021/10/image-103.png)
これが10進数をIEEE754単精度で表現したものになっています。
![](https://konsuki.com/wp-content/uploads/2021/10/image-129-1024x54.png)
最後に
「10進数をIEEE754単精度で表現せよ」もしくは、「10進数をIEEE754単精度に変換せよ」という問題は解けましたか?
この記事が問題を解く助けになったらうれしいです。
ここまで読んでくれてありがとうございました。
コメント