我尝试将两个字节转换为浮点数,但我的精度有问题。 在我的情况下,我读取临时并存储为两个字节。例如14.69 * C - 14(dec)到一个字节和69(dec)到第二个字节。然后我想将这些字节转换为float并与另一个float进行比较,例如:
byte byte1 = 0xE;
byte byte2 = 0x45;
float temp1 = (float) byte1*1.0 + (float) byte2*0.01; // byte2*0.1 if byte2<10
float temp2 = 14.69;
...
if (temp1==temp2){
...
}
我预计temp1值为14.69,但值为14.68999958 - 为什么,解决方案是什么?
答案 0 :(得分:0)
每次完成浮点运算时,都会丢失一些精度。您可以尝试通过尽可能用int替换浮点运算来减少错误。例如:
((float)((unsigned int)byte1 * 100 + (unsigned int)byte2))/100.0
另外,由于机器精度问题,比较用于严格相等的浮点数可能会失败,您应该使用if (fabsf(f1 - f2) < EPSILON)
答案 1 :(得分:0)
我认为你应该在将它们转换为float之前使用字节,浮点数在相等时并不是很精确。