Main Content

スケーリングされた double を使用した桁落ちの回避

この例では、モデル内のデータ型をスケーリングされた double でオーバーライドすることで、桁落ちを回避する方法を示します。

モデルを開く

ex_scaled_double モデルを開きます。

ex_scaled_double

ex_scaled_double モデルでは、Constant ブロックの [出力データ型]fixdt(1,8,4) です。Bitwise Operator ブロックは AND 演算子とビット マスク 0xFF を使用して、入力値を出力に渡します。[マスクの取り扱い] パラメーターは [格納整数] に設定されているので、ブロックではその入力の整数格納値 $Q$ を出力します。エンコード スキームは $V = SQ+B$ です。ここで、$V$ は実際値で、$Q$ は格納された整数値です。

固定小数点ツールでの範囲の収集

  1. Simulink® の [アプリ] タブから [固定小数点ツール] を選択します。

  2. [範囲の収集] ワークフローを選択します。

  3. 固定小数点ツールで、[範囲の収集]、[現在の設定を使用] を選択します。[範囲の収集] をクリックします。

Display ブロックによって 4.125 が Constant ブロックの出力値として表示されます。Stored Integer Display ブロックは、(SI) bin 0100 0010 を表示します。これは、格納されている整数値の 2 進数表現です。出力データ型 fixdt(1,8,4) では出力値 4.1 を正確に表現できないので、桁落ちが発生します。

スケーリングされた double でのデータ型のオーバーライド

モデル内のデータ型をスケーリングされた double でオーバーライドします。

  1. 固定小数点ツールで、[新規]、[範囲の収集] を選択して新しいワークフローを開始します。

  2. [範囲の収集]、[スケーリングされた倍精度] を選択します。[範囲の収集] をクリックします。

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 ブロックでは浮動小数点データ型をサポートしていないためです。

関連するトピック