为什么在使用 printf float 和 double 时显示相同的位数?
我想看看使用 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 显然是大小的两倍并且应该保存更多数字。我做错了什么?
I wanted to see the difference in how many digits i get when using float and when using double but i get the same results
#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;
}
It prints out the same value even tho double is obviously double the size and should save more digits. What am i doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
sizeof
返回size_t
。要打印size_t
,您需要%zu
而不是%d
如果您想了解
float
和double
您需要使用%.NUMBERf
打印更多数字,例如:
输出:
sizeof
returnssize_t
. To printsize_t
you need%zu
instead of%d
If you want to see the real difference between
float
anddouble
you need to print more digits using%.NUMBERf
Like:
Output:
当在
printf()
中将float
作为...
参数传递时,它首先被提升为double
。"%f"
将double
打印到.
之后四舍五入的 6 位。由于四舍五入到小数点后 6 位后原始值没有差异,因此它们看起来相同。
期望默认精度 6 不足以区分。
使用
"%a"
最容易看出不同。或以指数表示法具有足够的小数位。
When passing a
float
as a...
argument inprintf()
, it is first promoted to adouble
."%f"
prints thatdouble
to a rounded 6 places after the.
.Since the original values do not differ when rounded to 6 places after the decimal point, they appear the same.
Expecting the default precision of 6 is insufficient to distinguish.
Easiest to see different with
"%a"
.or with sufficient decimal places in exponential notation.