我经历了两个场景,32 位浮点计算和 64 位计算。该平台位于 16 位 Renesas M16C/28 MCU 上(该平台有一个乘法器,但没有浮点硬件。以 20 Mhz 运行,1 个周期 = 50 ns。
注意:这是用软件完成的,所以时间并不完美,但这个想法和概念已经得到了证明。
场景一:
void floatMultiple(void)
{
float a = 123456.1234;
float b = 123456.1234;
float result = 0;
result = a * b;
}
周期计时
最佳情况:305(15.25uSec) 最坏情况:2033(101.65uSec)
场景二:
void doubleMultiple(void)
{
double a = 123456.1234;
double b = 123456.1234;
double result = 0;
result = a * b;
}
使用相同的数字相同的系统,只是改变类型。最佳情况:2356(117.8uSec) 最坏情况:14567(728.35uSec)
我的计时系统有一点开销,我猜这个开销大约是 100 个周期。由于函数调用。
这仍然显示了与在 16 位 MCU 上使用浮点数和双精度数的显着差异。差异大约是 7 倍(对于这个平台)。
生成的汇编代码在不同系统上计算浮点值时可能存在差异。