gpt4 book ai didi

c++ - 将 float 转换为 unsigned short 时出现舍入问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:34 25 4
gpt4 key购买 nike

将 float 转换为无符号整数时出现错误值

TMAC_PAYLOAD_SCALE = 0.10
Data = (unsigned short)(mData / TMAC_PAYLOAD_SCALE);
189.20/0.10 = 1891 (I am expecting 1892)
184.59/0.10 = 1845 (I am expecting 1846)

同时尝试了 round 和 ceil 函数,但仍然得到错误的答案

最佳答案

如果 C++ 编译器 uses IEEE 754你可以试试round功能:

Data = (unsigned short)round(mData / TMAC_PAYLOAD_SCALE);

但是,假设除法的结果是非负的,下面的方法或许更好:

Data = (unsigned short)(mData / TMAC_PAYLOAD_SCALE + 0.5);

原因是对于浮点整数转换,小数部分只是被丢弃了。因此,如果舍入函数不能表示精确的整数值 N,并返回一个“略小于”N 的值,那么在转换后我们得到 N-1.

这个问题可以用下面的(IEEE 754 兼容)代码来说明:

int a = 16777217;
float f = a; // not double
int b = f;
cout << a << " " << b << endl;

哪些输出

16777217 16777216

虽然在 IEEE 754 和 round 函数的情况下不应发生所描述的问题(因为 round 返回 double 允许精确表示整数),但第一种方法看起来不太方便,因为我们必须牢记所有这些假设。

关于c++ - 将 float 转换为 unsigned short 时出现舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25621713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com