単精度浮動小数点数
2といった数値を正確に扱う事が苦手であり(表示上は補正されているが、10進小数を2進小数に変換すると殆どの場合循環小数となり、微小な切り捨てが発生する)高速性よりも(10進の世界での)正確性が優先されるようなケースにおいてBCD小数は強みを発揮した(各種利息計算など)。
ただし当時のスペックにおいて10進小数は相応に重い処理であり、DAAという10進補正用の専用CPU命令を持っていたZ80であっても複雑な演算になればなるほど(例えば三角関数や対数関数のような数学関数)2進小数より負荷が増していく。 MSX-BASICにおいて10進小数が採用された理由は、マイクロソフトBASICの中でも比較的後期に開発され新しい実装を試せた事、加えてホームコンピュータという需要の開拓においてより一般性を高めたいアスキー側の狙いがあったと考えられる。
CPUの浮動小数点ユニットとの相互運用を視野に入れなければならない現代の言語では、特殊な用途を除いてBCD小数を目にする機会は少ない。
IEEE754 では実数値から対応する binary32 フォーマットへの変換を丸めも含めて厳密に定めている。
ここでは十進の実数値から IEEE 754 binary32 フォーマットへの変換は大まかに次のようになる。
実数値を 12.375 のように整数部と小数部で表すものとする。
整数部を二進法で表現したものに変換する。
小数部を以下に示す技法で変換する。
2つの変換結果を組み合わせ、さらに変換を加えて最終的な表現を得る。
小数部の変換:
12.375 の小数部 0.375 を例とする。これを二進の小数に変換するため、小数部に2をかけて整数部をとり、さらに2をかけて整数部をとるというように繰り返していき、小数部がゼロになるか精度の上限である二進23桁になるまで続ける。
0.375 x 2 = 0.750 = 0 + 0.750 ⇒ b−1 = 0 となるので、二進での小数部の一桁目はゼロとなる。そこでさらに 0.750 に2をかける。
0.750 x 2 = 1.500 = 1 + 0.500 ⇒ b−2 = 1
0.500 x 2 = 1.000 = 1 + 0.000 ⇒ b−3 = 1 となり、小数部が 0.000 となったのでここで変換は停止する。
これで (0.375)10 は正確に二進で (0.011)2 で表されることがわかった。