固定小数点回路と浮動小数点回路
XILINXのFPGAである種の信号処理回路を作っているのですが、固定小数点回路と浮動小数点回路で結果が一致しました。
固定小数点では、16bit表現のとき、
符号.有効数字15桁
のようにして-1~1を表現する場合、結果を32768で割ることになります。
結果がパワーのような「二乗」で表現されている場合、16bitでは表現しきれないので32bit(二乗の和を積和する場合は48bit程度に拡張して)計算して、最終結果を32768*32768で割ることになります。
このような桁の換算が結構混乱しますが、演算自体は高速です。また、適当なビット([34:19]とか)をスライスして切り出せば、結果を目ですぐに見ることができ便利です。
一方、浮動小数点の場合は桁の換算は不要なのですが、XILINXのIPコアはIEEE754という形式で数を扱うので、これについて理解しておかなければなりません。詳しくはWikipediaを参照してください。
私は下記の形式にします。
IEEE754で表現された数値は、16進表現をぱっと見て人間が理解できるものでもないので、デバッグはやりにくいです。
C言語のfloatと互換性があるのかどうかはよくわかりませんが、IEEE754の32bit形式で格納された値をfloat型に変換するには、
*(float *)(&val)
で、要するに無理やりキャストでうまくいくようでした。
固定小数点と、浮動小数点の両方で計算したある種の計算の結果が、先のグラフに示したとおりで、まったく同じになりました。
| 固定リンク
コメント