【发布时间】:2021-12-11 17:08:43
【问题描述】:
我有一个这样的 C 程序:
#include <stdio.h>
int main() {
float number = 0;
scanf("%f", &number);
printf("%f\n", number);
}
输出是:
ururay@note:~/workspace/c/float-precision$ gcc float-precision.c -o float-precision
ururay@note:~/workspace/c/float-precision$ ./float-precision
5456.367
5456.367188
我已经多次执行这个程序,输出是一样的。 '188' 是否因为浮点精度而“附加”到数字的末尾?如果是这样,我怎么能在二进制表示中识别它?
【问题讨论】:
-
简短回答:是的。长答案:是的。
-
请参阅Is floating point math broken? 和Why Are Floating Point Numbers Inaccurate? 另请注意,
float的 binary 值中没有“附加”任何内容,也没有“存在”5456.367.printf的默认位置数为 6,因此您可以:printf("%.3f\n", number);获得 3 个位置。但是在这里,您有 7 个有效数字,无论如何都可以使用float类型完成的限制。 -
您的问题被回答为“是”,您想问的任何其他问题几乎都可以保证是 Weathers 提案的副本。请edit询问其他问题或确认重复。
-
这能回答你的问题吗? Why are floating point numbers inaccurate?