ARM上的C中的浮点转换

时间:2015-11-12 21:06:27

标签: c floating-point

我尝试将两个字节转换为浮点数,但我的精度有问题。 在我的情况下,我读取临时并存储为两个字节。例如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 - 为什么,解决方案是什么?

2 个答案:

答案 0 :(得分:0)

每次完成浮点运算时,都会丢失一些精度。您可以尝试通过尽可能用int替换浮点运算来减少错误。例如:

((float)((unsigned int)byte1 * 100 + (unsigned int)byte2))/100.0

另外,由于机器精度问题,比较用于严格相等的浮点数可能会失败,您应该使用if (fabsf(f1 - f2) < EPSILON)

答案 1 :(得分:0)

我认为你应该在将它们转换为float之前使用字节,浮点数在相等时并不是很精确。