gpt4 book ai didi

在 C 中将 4 个字节高精度地转换为 32 位 float ?

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:20 26 4
gpt4 key购买 nike

我有 4 个字节,就像 unsigned char 的值一样:63 129 71 174。

据推测,将其转换为float时,应该变为1.0099999904632568 .

然而,我得到的返回是 1.01,这对于我正在做的事情来说不够精确。

我使用了诸如 memcpy 或 uninion 之类的流行方法但无济于事,这让我相信......这是 C 中的某种限制吗?

如果是这样,最优解是什么?谢谢。

编辑:对不起,不好的例子。我应该为我的情况选择一个更好的。考虑这 4 个字节:0 1 229 13。

它很小,真的很小。但是,它是 4 个字节,所以它仍然表示 float number。 .但是,C 只会返回 0。我在小数点后放了 16 个数字,但它不起作用。

那么为什么以及如何使用这样的数字?

编辑 2:抱歉。我的 friend 搞砸了。她给了我 4 字节序列并说它是 32 位 float ,但结果是 32 位但无符号整数。这几乎把我整个下午都搞砸了。真的很抱歉打扰。

我想这里的结论是:不要总是相信你的 friend 。

最佳答案

使用 memcpy() 确实是正确的选择。

#include <stdio.h>
#include <string.h>

int main(void)
{
const unsigned char raw1[] = { 174, 71, 129, 63 };
const unsigned char raw2[] = { 0, 1, 229, 13 };
float x, y;
memcpy(&x, raw1, sizeof x);
memcpy(&y, raw2, sizeof y);
printf("%.6f\n", x);
printf("%g\n", y);
return 0;
}

这会打印 1.010000,我认为期望 float 的精度更高是不合理的。请注意,我交换了字节的顺序,我认为是在小端系统 (ideone.com) 上测试的。

第二个数字是 %g,它打印 1.41135e-30

关于在 C 中将 4 个字节高精度地转换为 32 位 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54884675/

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