簡體   English   中英

int16_t浮動轉換怪異

[英]int16_t to float conversion weirdness

我對這里發生的事情感到茫然。 我需要將float轉換為int16_t並返回。 這是語法:

int16_t val = (int16_t)round((float)0xFFFE/100 * angle);
//and back
float angle = ((float)100/0xFFFE * val;

當我使用初始角度值-0.093081時,它會轉換回來。 但是當我使用182.241211時它轉換回-17.764824?

知道發生了什么事嗎?

0xFFFE 幾乎是最大的16位數; 並且只針對無符號的 16位數字。 如果將它除以100然后乘以182,它肯定會溢出。

為清晰起見,讓我們在基數10中完全完成(0xFFFE為65534):

65534 / 100 *  -0.093081 =    -60.99970254
65534 / 100 * 182.241211 = 119429.95521674

您簽名的16位整數的全部范圍幾乎肯定是[-32768,32767]。 最后的結果不合適。

暫無
暫無

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

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