【发布时间】:2023-03-24 04:33:01
【问题描述】:
我有 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:对不起。我的朋友搞砸了。她给了我 4 个字节的序列,并说它是 32 位浮点数,但结果是 32 但无符号整数。这几乎把我整个下午都搞砸了。真的很抱歉打扰。
我猜这里的结论是:不要总是相信你的朋友。
【问题讨论】:
-
很可能您只是打印输出精度不够。
-
尝试
printf("%.10f", myFloat)并检查结果。 -
感谢您的指出。它解决了我一半的问题。然而,另一半,比如一个由 4 个字节表示的数字: 0 1 229 13... 它是一个浮点数,只是一个非常小的浮点数。我该如何使用它?谢谢。
-
如果你想打印一个很小/很大的
float,你可能想用科学计数法打印它,像这样:printf("%.10e\n", myFloat); -
对于第二个例子,使用
printf("%.50f", myFloat);产生0.00000000000000000000000000000000000000017400343421
标签: c floating-point byte precision