16ビット浮動小数点半精度数を加算および減算するにはどうすればよいですか?
足し算または引き算が必要だとしましょう。
1 10000 0000000000
1 01111 1111100000
2の補数形式。
16ビット浮動小数点半精度数を加算および減算するにはどうすればよいですか?
足し算または引き算が必要だとしましょう。
1 10000 0000000000
1 01111 1111100000
2の補数形式。
OpenEXRライブラリは、半精度浮動小数点クラスを定義します。これはC++ですが、ネイティブIEEE754floatとhalfの間でキャストするためのコードは簡単に適応できるはずです。参照:開始としてhalf/half.h。
IEEEの単精度/倍精度と同様の非正規化表現を使用していると仮定すると、仮数はE!= 0の場合は1.M、E == 0の場合は0.Mとして、符号=(-1)^Sを計算します。指数=E--2 ^(n-1)であり、これらの自然な表現を操作し、16ビット形式に変換し直します。
sign1 = -1 mantissa1 = 1.0 exponent1 = 1
sign2 = -1 mantissa2 = 1.11111 exponent2 = 0
合計:符号=-1仮数=1.111111指数=1
表現:1 10000 1111110000
当然、これは指数の過剰なエンコードを前提としています。