由于缺少fp操作单元,特定嵌入式系统上的库不具有sin和cos等函数。
周围有没有通过查找表提供函数的库?我实际上不需要100%可靠的值。
发布于 2013-02-08 15:48:27
根据所需的速度和精度要求,也许您可以通过编写创建查找表的程序来创建简单查找表所需的函数。或者使用CORDIC。
发布于 2013-02-08 17:28:11
对于没有硬件浮点的目标,一种更好的方法可能是使用定点和CORDIC算法。
Anthony Williams的fixed-point maths library为fixed数据类型提供了标准数学库的完整模拟,通常比同一目标上的软件浮点快5倍左右。它是一个C++库,但只要您的编译器支持C++,即使您的其余代码不使用C++特定的特性,这也不是问题。在大多数情况下,要使用这个库,只需对端口代码执行的操作就是将math.h替换为fixed.hpp,并将类型关键字float和double替换为fixed类型。
发布于 2013-02-08 16:20:13
如果您的系统没有提供sin/cos函数的库,或者在内存中没有查找表,那么您可以非常容易地创建一个。
Next matlab函数将在c标头myheader.h中提供sin(x) (0,2*pi范围,2*pi/100步长):
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};https://stackoverflow.com/questions/14767810
复制相似问题