我跑過了兩個場景,32位浮點運算和64位運算。該平臺採用16位瑞薩M16C/28 MCU(該平臺有一個乘法器,但沒有浮點硬件,運行在20 Mhz,1個週期= 50 ns)
注意:這是用軟件完成的, 「噸完美,但這個想法和概念中它被證明
方案1:在週期
void floatMultiple(void)
{
float a = 123456.1234;
float b = 123456.1234;
float result = 0;
result = a * b;
}
定時
最好的情況:305(15.25uSec) 情況下惡化:2033 (101。 65uSec)
方案2:
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上使用float和double的顯着差異。差距大約是7倍(對於這個平臺)。
生成的彙編代碼可能與計算不同系統上的浮點值有所不同。
恰恰是42個時鐘週期。 –
@Paul如何來42,似乎是任意的。 – Ashitakalax
嗯,是的 - 這是關鍵 - 不知道CPU或任何其他相關細節,你會如何期待任何人給你一個有用的答案? –