Altifigence Academy

5 / 24 · 概念

固定小数点のビットと単位

F=4で0.5と−1.25を掛け、F=8のバイアス0.25を加えます。アキュムレータのコードと実数値は何ですか。

整数に単位を付ける

固定小数点は整数コードと固定スケールで実数を表します。ここでは全8ビット、2の補数の符号付き記憶、小数部4ビットF=4を指定します。コードqはq×2⁻⁴を表します。Q形式の名称は符号ビットを整数部に数えるかどうかが異なる場合があるため、全ビット幅、符号の有無、Fを明記します。コード−128から127は−8から7.9375を表します。

同じビットパターンもスケールで意味が変わります。コード24はF=4で1.5、F=3で3です。異なる単位のコードを足すのは、広い加算器でも誤りです。先にスケールを合わせ、その際に生じる丸めとオーバーフローを定義します。

計算例

1.5を24、−0.75を−12として符号化します。整数積は−288です。小数部の幅は加算されるため、積はF=8で−288/256=−1.125を表します。符号付き8ビットオペランド2個の完全積は16ビットに収まりますが、多数の積の和には別のアキュムレータ幅計算が必要です。各積をF=4へ丸め直すと、すべての項に誤差を導入します。ここでは累積中に積のスケールを保持し、出力時に1回だけ丸めます。

実数のバイアス0.5はF=8でコード128です。加算すると−160となり、−0.625を表します。F=4でのバイアスコード8を加えると、単位が違います。保存コードとともにバイアスのスケールを記述します。

負の2の補数コードを広げるときは符号ビットを繰り返します。−12の8ビット表現は11110100で、16ビット拡張は1111111111110100です。ゼロ拡張すると正の244になります。RTLのオペランドと中間値を符号付きで宣言し、狭い代入先が式の幅を修正すると仮定せず、幅を明示します。

2の累乗のスケールならシフトの関係を確認しやすくなります。一般のアフィン量子化はその他の正のスケールとゼロ点を使います。設計メモではコード、スケール、表す値を一緒に記録し、乗算、累積、最終変換が理解できるようにします。

自分で考えてみましょう

F=4で0.5と−1.25を掛け、F=8のバイアス0.25を加えます。アキュムレータのコードと実数値は何ですか。

解説を見る

コードは8と−20で、積は−160です。バイアスコードは64です。F=8のアキュムレータ−96は−0.375を表します。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。