首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

VDSP (BF561) 浮點運算系列(8):float 除法運算特殊情況與週期分析

     編輯:關於C++

VDSP float 除法編譯為 __float32_div(libdsp/fpdiv.asm),基於 Hennessy & Patterson《計算機架構》演算法,處理多種特殊情況。

特殊情況處理流程

  1. 被除數為 NaN/Inf:
    • 被除數 Inf 且除數合法 → 回傳 Inf(帶符號)
    • 其他 → 回傳 NaN
  2. 除數為 NaN/Inf:
    • 0 / Inf → 0
    • 0 / NaN → NaN
    • Inf / Inf → NaN
  3. 除數為 0:
    • 0 / 0 → NaN
    • 非 0 / 0 → Inf
  4. 被除數為 0:直接回傳 0(44 cycles)。
  5. 被除數 == 除數:回傳 ±1(48 cycles)。
  6. 向上溢出(大數除小數):回傳 Inf(59 cycles),文檔註解誤寫為 NaN。
  7. 正常計算:240 cycles(最慢路徑)。
  8. 向下溢出:回傳 0(243 cycles)。

週期數總結表

情況結果Cycles
x=Inf, y=合法Inf48
x=NaN/其他NaN50
0/Inf050
0/NaNNaN52
Inf/InfNaN50
x=0044
x==y±148
溢出Inf59
正常商240
下溢0243

除法為浮點運算中最昂貴,應盡量避免或使用倒數乏法替代。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved