簡體   English   中英

將 Float32 轉換為 Float16

[英]Converting Float32 to Float16

這更像是對https://stackoverflow.com/a/5587983/13586005的跟進。 @sam hocevar 或其他任何了解這一點的人:您介意解釋這里發生的事情嗎:

tmp = (tmp - 0x70) & ((unsigned int)((int)(0x70 - tmp) >> 4) >> 27);

我不確定我是否完全遵循它。 我知道(tmp - 0x70)正在糾正 127->15 偏差,但我不明白第二部分( (unsigned int)((int)(0x70 - tmp) >> 4) >> 27 )和因此,在最后一步中不理解帶有更正偏差的 &。 謝謝!

(unsigned int)((int)(0x70 - tmp) >> 4) >> 27

相當於1

(int)(0x70 - tmp) < 0 ? 0x1f : 0

但保證不涉及分支——而是從提取結果中提取符號位,復制 4 次,然后降檔以獲得 0x1f 或 0,具體取決於。


1在負數的有符號右移進行適當算術移位的假設下——不受 C 規范的保證,但在大多數實現中都很常見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM