为什么在使用 printf float 和 double 时显示相同的位数?
Why when using printf float and double show the same number of digits?
我想看看使用 float 和使用 double 时得到的位数有多少不同,但得到的结果相同
#include <stdio.h>
int main()
{
float x=1.2222222222222222f;
printf("%f %d", x,sizeof(x)); // This is what it prints out 1.222222 4
return 0;
}
#include <stdio.h>
int main()
{
double x=1.2222222222222222;
printf("%f %d", x,sizeof(x)); // This is what it prints out 1.222222 8
return 0;
}
它打印出相同的值,即使 double 显然是大小的两倍并且应该保存更多数字。我做错了什么?
sizeof
returnssize_t
。要打印 size_t
你需要 %zu
而不是 %d
如果您想查看 float
和 double
之间的真正区别,您需要使用 %.NUMBERf
打印更多数字
喜欢:
#include <stdio.h>
int main(void)
{
float x=1.2222222222222222f;
printf("%.70f %zu\n", x,sizeof(x));
double y=1.2222222222222222;
printf("%.70f %zu\n", y,sizeof(y));
return 0;
}
输出:
1.2222222089767456054687500000000000000000000000000000000000000000000000 4
1.2222222222222220988641083749826066195964813232421875000000000000000000 8
It prints out the same value even tho double is obviously double the size and should save more digits.
在 printf()
中将 float
作为 ...
参数传递时,它首先被提升为 double
。 "%f"
将 double
打印到 .
.
后的四舍五入的 6 位
由于四舍五入到小数点后 6 位时原始值没有差异,因此它们看起来相同。
What am i doing wrong?
期望默认精度6是不够区分的。
最容易看出与 "%a"
的不同。
printf("%a\n", 1.2222222222222222);
printf("%a\n", 1.2222222222222222f);
0x1.38e38e38e38e3p+0
0x1.38e38ep+0
或以指数表示法有足够的小数位。
printf("%.*e\n", DBL_DECIMAL_DIG - 1, 1.2222222222222222);
printf("%.*e\n", DBL_DECIMAL_DIG - 1, 1.2222222222222222f);
1.2222222222222221e+00
1.2222222089767456e+00
我想看看使用 float 和使用 double 时得到的位数有多少不同,但得到的结果相同
#include <stdio.h>
int main()
{
float x=1.2222222222222222f;
printf("%f %d", x,sizeof(x)); // This is what it prints out 1.222222 4
return 0;
}
#include <stdio.h>
int main()
{
double x=1.2222222222222222;
printf("%f %d", x,sizeof(x)); // This is what it prints out 1.222222 8
return 0;
}
它打印出相同的值,即使 double 显然是大小的两倍并且应该保存更多数字。我做错了什么?
sizeof
returnssize_t
。要打印 size_t
你需要 %zu
而不是 %d
如果您想查看 float
和 double
之间的真正区别,您需要使用 %.NUMBERf
喜欢:
#include <stdio.h>
int main(void)
{
float x=1.2222222222222222f;
printf("%.70f %zu\n", x,sizeof(x));
double y=1.2222222222222222;
printf("%.70f %zu\n", y,sizeof(y));
return 0;
}
输出:
1.2222222089767456054687500000000000000000000000000000000000000000000000 4
1.2222222222222220988641083749826066195964813232421875000000000000000000 8
It prints out the same value even tho double is obviously double the size and should save more digits.
在 printf()
中将 float
作为 ...
参数传递时,它首先被提升为 double
。 "%f"
将 double
打印到 .
.
由于四舍五入到小数点后 6 位时原始值没有差异,因此它们看起来相同。
What am i doing wrong?
期望默认精度6是不够区分的。
最容易看出与 "%a"
的不同。
printf("%a\n", 1.2222222222222222);
printf("%a\n", 1.2222222222222222f);
0x1.38e38e38e38e3p+0
0x1.38e38ep+0
或以指数表示法有足够的小数位。
printf("%.*e\n", DBL_DECIMAL_DIG - 1, 1.2222222222222222);
printf("%.*e\n", DBL_DECIMAL_DIG - 1, 1.2222222222222222f);
1.2222222222222221e+00
1.2222222089767456e+00