gpt4 book ai didi

c - ARM 上的 C 中的浮点转换

转载 作者:行者123 更新时间:2023-11-30 17:08:24 24 4
gpt4 key购买 nike

我尝试将两个字节转换为 float ,但精度有问题。就我而言,我读取 temp 并存储到两个字节中。例如,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 - 为什么,解决方案是什么?

最佳答案

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

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

此外,由于机器精度问题,比较 float 是否严格相等可能会失败,您应该使用 if (fabsf(f1 - f2) < EPSILON)

关于c - ARM 上的 C 中的浮点转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681353/

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