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

VDSP (BF561) 浮點運算系列(10):fract16 1.15 格式表示與負數編碼

     編輯:關於C++

fract16 採用 1.15 定點格式:1 位符號 + 15 位數值,無指數/尾數分離。

數值範圍

  • 最大值:+0.999969482421875 (0x7FFF)
  • 最小值:-1.0 (0x8000)
  • 解析度:2^-15 = 0.000030517578125

效能考量

使用 fract 需先歸一化資料(浮點運算開銷大),僅當運算量遠大於歸一化開銷時才有優勢。文檔範例:兩 float 相乘用 fract 需 743 cycles,直接 float 乏法僅 92 cycles。

型別定義與除錯

typedef short fract16; 非內建型別,除錯時需在寄存器視窗手動切換型別查看真值。

負數編碼差異

  • float:符號位獨立,0.2=0x3E4CCCCD,-0.2=0xBE4CCCCD(僅最高位不同)。
  • fract16:補碼表示,0.2=0x1999,-0.2=0xE666,兩者相加為 0xFFFF。

**不能**像 float 那樣單純翻轉最高位改變符號。

取反運算

negate_fr1x16(x) → __builtin_negate_fr2x16((int)x)
// 組合語言:R1 = -R0 (V); R1 = R1.L (X);

直接整數取反(含飽和處理:0x8000 取反飽和為 0x7FFF)。

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