STM32 L431浮點數效能測試

2021-10-09 05:38:09 字數 1276 閱讀 2887

執行的主頻是80mhz

求sin值

ticks =

hal_gettick()

;//進行浮點數計算

for(uint16_t i=

0;i<

10000

;i++

)//進行一萬次sin函式計算

ticks =

hal_gettick()

;for

(uint16_t i=

0;i<

10000

;i++

)//進行一萬次sin函式計算

ticks =

hal_gettick()

;

執行一萬次sin函式,fpu加速效果非常明顯。不是用fpu的話需要402ms,使用了fpu只需要12ms!非常誇張。相差了33.5倍。

求平方根

ticks =

hal_gettick()

;//進行浮點數計算

for(uint32_t i=

0;i<

10000

;i++

) ticks =

hal_gettick()

;for

(uint32_t i=

0;i<

10000

;i++

) ticks =

hal_gettick()

;

執行一萬次平方根操作,不用fpu執行為160ms,使用了fpu時間為10ms,相差16倍

浮點數加法

ticks =

hal_gettick()

;//進行浮點數計算

for(uint32_t i=

0;i<

100000

;i++

) ticks =

hal_gettick()

;

分別開啟fpu和關閉fpu計算10w次加法運算。開啟fpu需要25s,關閉fpu後需要130ms

相差了5.2倍

總結:fpu對浮點數加速效果非常明顯,一般粗略地可以認為在m4核心中有10倍的加速效果。這個fpu對中規模浮點數運算還是非常有用的,但是在低複雜度的計算中,1ms與0.1ms似乎對很多應用沒什麼區別,但是對於100ms和1s來說相差就很客觀了。當然更高的話就不應該用m4去做了。除了一般的加速,有了fpu還可以使用arm的數學庫,做fft運算,fir濾波等操作都非常方便。而且現在m3與帶fpu的m4**真的沒太大差別,怎麼選用還是看應用場景吧。

32位短浮點數計算

下面是某種計算機的32位短浮點數格式 0 1 8 9 31 ms e m 其中,m 為用定點小數表示的尾數的絕對值,佔 23 位 ms 是尾數的符號位,佔1 位 ms 和 m 一起表示尾數。e 為用定點整數表示的階碼,佔 8 位。若機器表示中取階碼的基數為 2 求採用下列五種不同編碼方式時,浮點數 ...

Go程式語言3 2 浮點數

3.2 浮點數 go具有兩種大小的浮點數float32和float64。其算術特性遵從ieee 754標準,所有新式cpu都支援該標準。這兩個型別的值可從極細微到超巨集大。math包給出了浮點值的極限。常量math.maxfloat32是float32的最大值,大約為3.4e38,而math.max...

基於STM32的浮點數運算出錯詳解

因為十進位制運算的底層是2進製運算,有些浮點數並不能完全用二進位制表示,一定會有誤差,誤差在小數點最後幾位。比如下面這個例子,想要分別取出整數部分和小數部分。浮點數26.90想要得到的理想輸出結果是 整數26和整數90 兩個數。float value 26.90 unsigned int value...