[英]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.