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?
CodePudding user response:
sizeof
returns size_t
. To print size_t
you need %zu
instead of %d
If you want to see the real difference between float
and double
you need to print more digits using %.NUMBERf
Like:
#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;
}
Output:
1.2222222089767456054687500000000000000000000000000000000000000000000000 4
1.2222222222222220988641083749826066195964813232421875000000000000000000 8
CodePudding user response:
You see same amount of digits after .
, because C
rounds off them.
You can fix this issue by setting decimal precision in format specifier in printf()
function. ("%0.<LIMIT>lf"
)
Also, %f
is format specifier is for float
, use %lf
for double
.
Like this: TRY IT ONLINE
#include <stdio.h>
int main(void)
{
double pi = 3.1415926535;
printf("Before:\n");
printf("%lf %zu\n", pi,sizeof(pi));
printf("After:\n");
printf("%0.10lf %zu", pi,sizeof(pi));
return 0;
}
Output:
Before:
3.141593 8
After:
3.1415926535 8