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

VDSP (BF561) 浮點運算系列(13):fract16 乘法的三種模式與精度差異

     編輯:關於C++

VDSP 提供三種 fract16 乏法內建函數,對應不同捨入/飽和策略,均單週期完成。

1. mult_fr1x16(截斷模式)

__builtin_mult_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L (T)  // 截斷
// R0 = R0.L (X)

(T) 尾綴:有符號分數乘法,截斷於 bit 16,不捨入,飽和至 1.15 精度。結果範圍 [-1, 1-2^-15]。

2. multr_fr1x16(捨入模式)

__builtin_multr_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L  // 無尾綴,預設捨入
// R0 = R0.L (X)

捨入由 ASTAT 中 RND_MOD 位控制(偏向/無偏向捨入)。與截斷模式最大差值 2^-15。

3. multu_fr1x16(無符號模式)

__builtin_multu_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L (FU)  // 無符號分數
// R0 = R0.L (X)

(FU):0.16 x 0.16 → 0.32,無位移修正,捨入後飽和至 0.16 精度。範圍 [0, 1-2^-16]。非標準 fract16 格式,文檔未記載。

總結

  • 三者皆單週期,硬體加速。
  • 選擇取決於應用需求:一般 DSP 用 multr(捨入),特定演算法需截斷用 mult,無符號運算用 multu。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved