特定の組み込みシステムのlibmathには、 fp操作単位がないなどの機能がsin
ありません。cos
ルックアップテーブルを介して関数を提供するライブラリはありますか?実際には100%信頼できる値は必要ありません。
ハードウェア浮動小数点のないターゲットのより良い方法は、おそらく固定小数点とCORDICアルゴリズムを使用することです。
Anthony Williamsの固定小数点数学ライブラリは、同じターゲット上のソフトウェア浮動小数点fixed
よりも通常約5倍高速なデータ型の標準数学ライブラリの完全な類似物を提供します。これはC++ライブラリですが、コンパイラがC ++をサポートしている限り、コードの残りの部分でC++固有の機能が使用されていなくても問題はありません。ほとんどの場合、このライブラリを使用するためにコードを移植するために必要なのは、math.hをfixed.hppに置き換え、typeキーワードとtypeを置き換えることだけです。float
double
fixed
速度と精度に必要な要件に応じて、ルックアップテーブルを作成するプログラムを作成することにより、単純なルックアップテーブルに必要な関数を作成できます。または、CORDICを使用します。
sin / cos関数を提供するシステム用のライブラリ、またはメモリ内のルックアップテーブルがない場合は、非常に簡単に作成できます。
次のmatlab関数はsin(x)
、acヘッダーで([0,2*pi]範囲と2*pi / 100ステップ)を提供しますmyheader.h
。
step=2*pi/100;
x=[0:step:2*pi];
y=floor(0.5 * 65535 * sin(x));
fd=fopen('myheader.h','wt');
fprintf(fd,'int16_t y[%d]={%g',length(y),y(1));
fprintf(fd,',\n %.9g',y(2:end));
fprintf(fd,'};\n');
fclose(fd);
ヘッダーは次のようになります。
int16_t y[101]={0,
2057,
4107,
6140,
8149,
10126,
12063,
13952,
15786,
17558,
19260,
20887,
22431,
23886,
25248,
26509,
27667,
28714,
29649,
30466,
31164,
31738,
32187,
32509,
32703,
32767,
32703,
32509,
32187,
31738,
31164,
30466,
29649,
28714,
27667,
26509,
25248,
23886,
22431,
20887,
19260,
17558,
15786,
13952,
12063,
10126,
8149,
6140,
4107,
2057,
-0,
-2057,
-4107,
-6140,
-8149,
-10126,
-12063,
-13952,
-15786,
-17558,
-19260,
-20887,
-22431,
-23886,
-25248,
-26509,
-27667,
-28714,
-29649,
-30466,
-31164,
-31738,
-32187,
-32509,
-32703,
-32768,
-32703,
-32509,
-32187,
-31738,
-31164,
-30466,
-29649,
-28714,
-27667,
-26509,
-25248,
-23886,
-22431,
-20887,
-19260,
-17558,
-15786,
-13952,
-12063,
-10126,
-8149,
-6140,
-4107,
-2057,
-0};
Jack Ganssleには、組み込みシステムのトリガーの最適化に関する優れた記事があります。
独自のライブラリを作成することの難しさに比べて、デザインの選択肢やパラメータ化が多すぎるため、このようなライブラリを提供することは意味がないと思います。つまり、これらはどれも非常に難しいことではありませんが、万能のソリューションとして提供することはできません。
パラメータ:
その価値
要件
方法