5456.367 -> 5456.367188。这是因为 c 中的浮点精度吗?

5456.367 -> 5456.367188. Is this because float precision in c?

我有一个这样的 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”是否因为浮点精度而“附加”到数字的末尾?如果是这样,我如何以二进制表示形式识别它?

是的,如果你想要更好的精度,请尝试使用 doublelong double(但 long double 比其他类型慢得多,或者引用与 double 相同的类型).

另外printf只需要doublelong double去看看the spec of printf

数字 5456.367 无法在 IEEE-754 单精度浮点格式中准确表示。

最接近的数字是 5456.3671875,它的二进制表示形式是 01000101101010101000001011110000。下一个较小的可表示数是 5456.3666992,它具有二进制表示 01000101101010101000001011101111.