Main Content

エラーの解決: 固定小数点の変換でサポートされていない関数

問題

一部の関数は固定小数点の変換でサポートされておらず、変換でエラーの原因になることがあります。

考えられる解決策

サポートされていない関数の分離

変換でサポートされていない関数がある場合、アルゴリズムのその部分を一時的に浮動小数点として残しておくことができます。

次のコードは、関数 log が固定小数点入力にはサポートされていないため、エラーを返します。

x = fi(rand(3),1,16,15);
y = log(x)

入力 x を double にキャストし、出力を固定小数点データ型にキャストし直します。

 y = fi(log(double(x)),1,16)
y = 

   -0.2050   -0.0906   -1.2783
   -0.0990   -0.4583   -0.6035
   -2.0637   -2.3275   -0.0435

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

このキャスト操作により、代替関数を見つけるまで変換を継続することができます。

代替関数の作成

サポートされていない関数を固定小数点の変換でサポートされる代替関数に置き換えることができます。

  • ルックアップ テーブルによる近似 — 固定小数点の変換でサポートされていない多くの関数をルックアップ テーブルで置き換えることができます。例については、ルックアップ テーブルを使用した固定小数点 Log2 の実装を参照してください。

  • 多項式による近似 — 固定小数点でサポートされていない関数の結果を多項式で近似できます。例については、固定小数点の逆正接計算を参照してください。

  • ユーザーが作成した関数 — 固定小数点入力をサポートする独自の関数を記述できます。たとえば、固定小数点入力をサポートする関数 mod を使用して、固定小数点入力をサポートしない関数 rem の独自のバージョンを記述できます。

関連するトピック