最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

  1. ex_scaled_double モデルを開くには、MATLAB® コマンド ラインで次を入力します。

    addpath(fullfile(docroot,'toolbox','fixpoint','examples'))
    ex_scaled_double

    このモデルには次の項目が含まれています。

    • Constant ブロックの [出力データ型]fixdt(1,8,4) です。

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

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

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

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

  4. モデル内のデータ型をスケーリングされた double でオーバーライドします。固定小数点ツールで、[範囲の収集][スケーリングされた倍精度] を選択します。[範囲の収集] をクリックします。

    Display ブロックによって 4.1Constant ブロックの出力値として正しく表示されます。Stored Integer Display ブロックは、(SI) 65 を表示します。これは、格納されている整数値の 2 進数表現です。モデルではスケーリングされた double を使用してデータ型 fixdt(1,8,4) をオーバーライドするので、コンパイルされた出力データ型は flts8_En4 に変更されます。これは、fixdt(1,8,4) のスケーリングされた double と同等です。

    スケーリングされた double では、double を使用して格納値が保持され、指定されたデータ型とスケーリングに関する情報が保持されるため、桁落ちは発生しません。

    メモ

    データ型オーバーライド設定に [倍精度] を使用することはできません。Bitwise Operator ブロックでは浮動小数点データ型をサポートしていないためです。

関連するトピック