・In English
前提知識
・2進数
・浮動小数点
固定小数点の特徴を浮動小数点と比較して説明します。
■固定小数点のLSBとOFFSET
浮動小数点は扱う数の大きさに合わせて扱える小数点の位が変わりますが、固定小数点は扱える小数点の位が固定されます。
例えば小数点第2位で表現すると定義した場合、扱える値は0.01刻みの値となります。この0.01をLSB(Least Significant Bit)または分解能といいます。
また扱うデータにOFFSETをかけ、扱うデータの最小値を決めることが出来ます。例えば、

■固定小数点のデータ型
扱う事ができるデータサイズは浮動小数点は4byteが最小値ですが、固定小数点は1byte,2byteなど、4byteより小さいデータ型(データサイズ)を扱う事ができます。
その場合、データサイズが1byteの時は表現できる値は256通りの値となり、2byteの時は65536通りとなります。

■固定小数点のデータ範囲
LSB、OFFSET、データサイズから、扱えるデータの範囲が決まります。例えば、

LSB/OFFSET/データサイズは、実際に扱いたい値の範囲に合わせて適切に設定する必要があります。
例えば気温データを扱おうとした場合、上記の様にLSB=0.01、OFFSET=-10、データサイズを1byteにすると、扱える値の範囲は-10~-7.45となるので
気温データを扱うには適切ではないことが解ります。どの様なLSB/OFFSET/データ型を設定するかは設計者のセンスに委ねられます。
以下は気温データを扱う場合の適切な設定例です。

■固定小数点のメリット
① 浮動小数点に比べデータ容量を節約できる。
プログラムをマイコンに実装する場合、マイコンのROM容量を節約する事は非常に重要です。昔のファミコンカセットでは容量を節約するために様々な工夫がされましたが、データの1byte化もその一つでした。
ドラゴンクエスト2のラスボスのシドーのHPは255でした(本来はもっと高いHPを設定したかった)が、ベホマでHPを全回復させる事で
HPの低さをカバーするという工夫をしていたのは有名な話です。また容量問題は昔だけの話ではなく、現在も組み込みソフトウェアを開発する上では重要になっています。
ROM容量を増やすことはマイコンのコストアップにつながりますので。
② 扱えるデータが決められているので、値の大小比較に向いている。
小数点のある数字を2進数で表す時のそもそもの問題として、2進数は循環小数になってしまう場合が多く、浮動小数点の場合は近似誤差が生じてしまいます。
従って例えば「AとBが等しい場合」というプログラムを組んだとしても、人間にとっては同じ数字同士を比較しているつもりが、一致していないという判断をしてしまう場合があります。
この様な時は固定小数点化が向いております。なお固定小数点化すると循環小数が発生しない訳ではなく、循環小数が発生しても値を切り捨てる事をしております。
■固定小数点のデメリット
① LSB/OFFSET/データ型を設定する必要があるので、ミスや誤解を招きやすい。
上記のとおり、LSB/OFFSET/データ型を設定は設計者のスキルに委ねられるので、間違いを起こす原因となります。
また、マイコンに実装する前の段階のPCで動かすシミュレーションソフトは浮動小数点が前提になっている場合があるため、
シミュレーションと実装結果の不一致が生じる可能性があります。
② 固定小数点から浮動小数点に変換する場合に処理負荷がかかる
今時のマイコンに実装するプログラムは全て固定小数点化という訳にはいかず、やはり設計のしやすさから浮動小数点が使われることが多いです、
固定小数点と浮動小数点同士の計算はできないので、固定小数点化されたデータは浮動小数点に変換する必要があり、その際には処理負荷がかかってしまいます。
ただし全て固定小数点化されたプログラムの場合は、固定小数点の方が高速に演算できるようです。
サブチャンネルあります。⇒ 何かのお役に立てればと
|