我想更好地理解浮点值和相关的不精确性。
以下是两个略有修改的片段
Snippet 1
#include <stdio.h>
int main(void)
{
float a = 12.59;
printf("%.100f\n", a);
}
输出:
12.5900001525878906250000000000000000000000000000000000000000000000000000000000000000000000000000000000
代码段2:
#include <stdio.h>
int main(void)
{
printf("%.100f\n", 12.59);
}
输出:
12.589999999999999857891452847979962825775146484375000000000000000000000000000000000000000000000000000
为什么两个输出都有差异?我无法理解这个问题。
答案 0 :(得分:2)
在第一种情况下,您将变量定义为浮点数,在第二种情况下,您直接给出了数字。
系统可能会将直接数视为double而不是float。
所以,我认为可能是因为float和double的系统定义。
答案 1 :(得分:2)
获取可以显式使用浮点文字的一致行为:
printf("%.100f\n", 12.59f);
答案 2 :(得分:1)
在Snippet 1中,你的float会被转换为double,而这个转换会导致值发生变化(由于浮点表示的复杂性)。
在Snippet 2中,这个演员阵容并没有发生,而是直接打印成双人。
要理解,请尝试运行以下代码段:
#include <stdio.h>
int main(void) {
double a = 12.59;
printf("%.100f\n", a);
return 0;
}
和
int main(void) {
float a = 12.59;
printf("%.100f\n", (double)a);
return 0;
}
有关详细信息,请参阅此处:How does printf and co differentiate beetween float and double