Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does printf print wrong values?

Why do I get the wrong values when I print an int using printf("%f\n", myNumber)?

I don't understand why it prints fine with %d, but not with %f. Shouldn't it just add extra zeros?

int a = 1;
int b = 10;
int c = 100;
int d = 1000;
int e = 10000;

printf("%d %d %d %d %d\n", a, b, c, d, e);   //prints fine
printf("%f %f %f %f %f\n", a, b, c, d, e);   //prints weird stuff
like image 894
user69514 Avatar asked Sep 07 '10 01:09

user69514


2 Answers

well of course it prints the "weird" stuff. You are passing in ints, but telling printf you passed in floats. Since these two data types have different and incompatible internal representations, you will get "gibberish".

There is no "automatic cast" when you pass variables to a variandic function like printf, the values are passed into the function as the datatype they actually are (or upgraded to a larger compatible type in some cases).

What you have done is somewhat similar to this:

union {
    int n;
    float f;
} x;

x.n = 10;

printf("%f\n", x.f); /* pass in the binary representation for 10, 
                        but treat that same bit pattern as a float, 
                        even though they are incompatible */
like image 128
Evan Teran Avatar answered Oct 03 '22 22:10

Evan Teran


If you want to print them as floats, you can cast them as float before passing them to the printf function.

printf("%f %f %f %f %f\n", (float)a, (float)b, (float)c, (float)d, (float)e);
like image 45
Amarghosh Avatar answered Oct 03 '22 22:10

Amarghosh