浮点运算就是实数运算,包含小数运算。是相对于整数运算而言的。
大多数MCU并没有专门的浮点数运算硬件支持单元,这使得浮点数运算效率极为低下,和整数运算比是几十、几百倍的速度差异,还极为耗费其他资源(包括内存等)。
即使有浮点数运算单元支持,有时与整数运算比也是几倍速度差异。另外大多数MCU处理中,浮点数需求其实并不是那么强烈,很多可以采用工程计算手段处理为整数运算,由此要尽可能少用浮点运算。
没有FPU的单片机在进行浮点数运算的时候先要把这个浮点数运算转换成定点数存储,再把这个定点数转换成指数的方式进行运算,不仅中间要进行数据转换,并且要进行多次移位,而整数型就不需要这么复杂的操作,直接运算就可以,所以浮点数运算不仅运算量大并且会加大MCU的负载,所以要慢很多。
大多数MCU内部没有集成浮点数处理单元(FPU),计算浮点数是将数据 多次执行移位、按整数加减乘除获取结果的,一个加法就要几百条指令才能完成,所以慢。对于包含FPU的单片机不存在这个问题,浮点单元一个指令周期就能完成运算。
转载于
https://www.cnblogs.com/since1996/p/14139545.html
在没有FPU硬件的MCU中,尽量不要使用浮点数运算。如果进行实数运算,可以先将小数放大100、1000等倍数后变为整数后再进行运算。如果有FPU运算单元就可以进行浮点数运算了。注意:stm32f407的FPU是单精度的(即float型),而keil默认的浮点数类型是双精度的(即double型),故要在浮点数数据后面加f,注明为float型。
数据类型中的浮点型数据类型:单精度:float(32位);双精度:double(64位)