Cortex - M33处理器浮点单元(FPU)的使用与优化
1. 单双精度计算问题
在进行浮点计算时,很多开发者希望将代码中的浮点计算限制为单精度,因为某些处理器仅支持单精度计算,双精度运算需由软件借助开发工具链插入的运行时库函数来完成。然而,开发者在代码中意外使用双精度浮点运算的情况并不少见。
例如,以下来自Whetstone基准测试的代码:
X=T*atan(T2*sin(X)*cos(X)/(cos(X+Y)+cos(X-Y)-1.0));
Y=T*atan(T2*sin(Y)*cos(Y)/(cos(X+Y)+cos(X-Y)-1.0));
即便将变量 X 、 Y 、 T 和 T2 定义为 float (单精度),C编译器仍会生成包含双精度运算的编译代码。这是因为默认情况下,使用的数学函数是双精度的,常量 1.0 也被视为双精度。
若要生成单精度计算版本的代码,需进行如下修改:
X=T*atanf(T2*sinf(X)*cosf(X)/(cosf(X+Y)+cosf(X-Y)-1.0F));
Y=T*atanf(T2*sinf(Y)*cosf(Y)/(cosf(X+Y)+cosf(X-Y)-1.0F));
为确认编译代码未意外使用双精度计算,可通过编译报告文件检查编译代码中是否
超级会员免费看
订阅专栏 解锁全文
582

被折叠的 条评论
为什么被折叠?



