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

VDSP (BF561) 浮點運算系列(12):fract16 加減運算與飽和特性

     編輯:關於C++

fract16 加法由 __builtin_add_fr1x16 實現,減法對應 __builtin_sub_fr1x16,皆單週期完成。

加法組合語言

R0.L = R1.L + R0.L (S)  // (S) 表示飽和
R0 = R0.L (X)

飽和算術

  • 結果超過 0x7FFF(約 0.99997)飽和至 0x7FFF。
  • 結果低於 0x8000(-1.0)飽和至 0x8000。
  • 範圍:[-1, 1-2^-15]。

直接用 + 運算子的差異

r = x + y; // 非內建函數
// 組合語言:R0 = R0 + R1 (NS)  // 無飽和
// R0 = R0.L (X)

編譯器視為 32-bit 整數加法後取低 16 位,**不飽和**,會產生環繞結果,非預期行為。

減法

同理使用 __builtin_sub_fr1x16,內部以加負數實現,同具飽和特性。

結論:必須使用內建函數確保 DSP 語意正確,避免隱性 Bug。

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