スケーリングされた double を使用した桁落ちの回避
この例では、モデル内のデータ型をスケーリングされた double でオーバーライドすることで、桁落ちを回避する方法を示します。
モデルを開く
ex_scaled_double
モデルを開きます。
ex_scaled_double
ex_scaled_double
モデルでは、Constant ブロックの [出力データ型] は fixdt(1,8,4)
です。Bitwise Operator ブロックは AND
演算子とビット マスク 0xFF
を使用して、入力値を出力に渡します。[マスクの取り扱い] パラメーターは [格納整数] に設定されているので、ブロックではその入力の整数格納値 を出力します。エンコード スキームは です。ここで、 は実際値で、 は格納された整数値です。
固定小数点ツールでの範囲の収集
Simulink® の [アプリ] タブから [固定小数点ツール] を選択します。
[範囲の収集] ワークフローを選択します。
固定小数点ツールで、[範囲の収集]、[現在の設定を使用] を選択します。[範囲の収集] をクリックします。
Display ブロックによって 4.125
が Constant ブロックの出力値として表示されます。Stored Integer Display ブロックは、(SI) bin 0100 0010
を表示します。これは、格納されている整数値の 2 進数表現です。出力データ型 fixdt(1,8,4)
では出力値 4.1
を正確に表現できないので、桁落ちが発生します。
スケーリングされた double でのデータ型のオーバーライド
モデル内のデータ型をスケーリングされた double でオーバーライドします。
固定小数点ツールで、[新規]、[範囲の収集] を選択して新しいワークフローを開始します。
[範囲の収集]、[スケーリングされた倍精度] を選択します。[範囲の収集] をクリックします。
Display ブロックによって 4.1
が Constant ブロックの出力値として正しく表示されます。Stored Integer Display ブロックは、(SI) 65
を表示します。これは、格納されている整数値の 2 進数表現です。モデルではスケーリングされた double を使用してデータ型 fixdt(1,8,4)
をオーバーライドするので、コンパイルされた出力データ型は flts8_En4
に変更されます。これは、fixdt(1,8,4)
のスケーリングされた double と同等です。スケーリングされた double では、double を使用して格納値が保持され、指定されたデータ型とスケーリングに関する情報が保持されるため、桁落ちは発生しません。このモデルではデータ型オーバーライド設定に [倍精度] または [単精度] を使用できないことに注意してください。Bitwise Operator ブロックでは浮動小数点データ型をサポートしていないためです。