Last Updated on 2024年10月20日 by らくろぐ
この記事はこんな人におすすめです。
- 当サイトの管理人
- ITマイクロ法人運営中
- ITに関する、日々の便利な情報を発信中
業務や勉強において、ついつい何度も調べてしまったり、伝え聞いた内容を忘れないように、まとめようと心がています。
このサイトに訪れてくださった方の少しでもお役にたてると嬉しいです。
Webツール第5弾。固定小数点に続き、浮動小数点での2進数への変換方法について。FixedとFloatは扱うデータに合わせて入れ替えたりすることも多く、自分の整理を兼ねて記事にまとめます。
変換ツールは実装方法(コードの内容)よりも、浮動小数点化する途中段階も出力する形にしたので、変換の経緯を理解する手助けになっているかと思います。
【追記2023/12/21】
浮動小数点ツールの結果を16進数に変換結果も付けました。
Contents
浮動小数点(float)の方式
浮動小数点はその精度によって単精度と倍精度で表現できます。これはIEEE754の規格によるものです。
ここで言う、「符号」、「指数部」、「仮数部」は以下の意味を持ちます。
- 符号・・・・表現する数値の正、負を表す。正のとき0、負のとき1にする。
- 指数部・・・小数点を正規化し、0.M×2^-nで表現したときの指数部分を表現
- 仮数部・・・0.××の形式で正規化した小数点以下の値を格納
浮動小数点数の変換手順
2進数の「10.25」を32ビットの浮動小数点数の形式に変換していきます。
仮数部の求め方
仮数部には2進数「10.25」を正規化した値が入ります。以下の手順で実施します。
- 10.25を整数と小数点以下に分ける。例)10.25=10+0.25
- 整数部を2進数にする 例)10→1010
- 小数部を2進数にする 例)0.25→0.01000
- 整数部.小数部で表現(2進数)例)10.25→1010.01000
- 1.Mで表現できるようビットをずらす。
例)1010.01000→1.01001000 3bitシフト - 先頭の1を削除する 例)1.01001000 →010010
この結果をもって仮数部は以下のように表現できます。(残りは0埋めします)
指数部の求め方
指数部には仮数部を出す際に算出したシフト量を2進数に変換します。(2nのnを2進数に変換した値)が入ります。
- 仮数部で求めたシフト量3を2進数で表現 例)0000011 (10進数:3)
- バイアスで127を追加 例)00000011 + 01111111 →10000010
符号の設定
符号のビットに値を設定すれば完成です。今回は「10.25」は正の数なので、符号には”0″を設定します。(0:正の数、1:負の数)
IEEE754の浮動小数点数
IEEE(米国電気電子学会)により規格化された、浮動小数点数形式のことを「IEEE754」といいます。
- 固定小数点・・・小数点の位置を固定する。(xxxx.xxxxxで表記)
- 浮動小数点・・・1.xx × 10^(-x) で表記する。
今回のこの記事でもIEEE754の仕様に沿った形で説明しています。
浮動小数点変換ツール
小数点を含む、10進数の数値を浮動小数点表示するツールを以下に用意しました。
浮動小数点(2進数)で表現したい10進数を入力し、変換実行を押してください。
変換途中段階を出力するようにしています。
浮動小数点を2進数へ変換ツール
WordPressにJavascriptを組み込むのは同じ手法
前回の電卓と同様、この変換処理部分もJavascriptを使用しました。wordpressでJavascriptを取り込む手法は以下の記事を参照ください。
10進数を浮動小数点の2進数で表現する、まとめ
固定小数点に引き続き、浮動小数点の変換過程についてもまとめました。また途中を出力するツールも作成しました。
ソフトウエアで扱う際には、16進数でしかも仮数と指数で構造体で持つことがほとんどだと思いますので、2進数で出すだけでは不十分かもしれません。
過程を理解できるよう表示しましたがもう少しわかりやすく表示を改善することが課題と考えています。