ATMega表现为不同的操作

时间:2014-04-04 11:45:08

标签: arduino avr avr-gcc atmel atmega

是否有人在基于ATMega(2560)的系统上更换浮点运算?每天都会发生一些非常常见的情况。

例如:

  • 比分/乘法的比较快吗?

  • 对于没有类型转换的纯浮点运算,float到int类型转换是否跟随乘法/除法更快?

我希望我不必为我制作基准。

示例一:

int iPartialRes = (int)fArg1 * (int)fArg2;
iPartialRes *= iFoo;

更快?:

float fPartialRes = fArg1 * fArg2;
fPartialRes *= iFoo;

示例二:

iSign = fVal < 0 ? -1 : 1;

更快?:

iSign = fVal / fabs(fVal);

1 个答案:

答案 0 :(得分:1)

问题可以通过思考片刻来解决。

  1. AVR没有FPU,所以所有浮点相关的东西都是用软件完成的 - &gt; fp乘法涉及的不仅仅是简单的int乘法

  2. 由于AVR也没有整数除法单元,因此简单分支也比软件除法快得多。如果划分浮点数,这是最糟糕的最坏情况:)

  3. 但请注意,您的前两个示例会产生截然不同的结果。