Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assign double constant to float variable without warning in C?

In C programming language, the floating point constant is double type by default
so 3.1415 is double type, unless use 'f' or 'F' suffix to indicate float type.

I assume const float pi = 3.1415 will cause a warning, but actually not.

when I try these under gcc with -Wall:

float f = 3.1415926;  
double d = 3.1415926;  
printf("f: %f\n", f);  
printf("d: %f\n", d);  
f = 3.1415926f;  
printf("f: %f\n", f);  
int i = 3.1415926;  
printf("i: %d\n", i);  

the result is:

f: 3.141593  
d: 3.141593  
f: 3.141593  
i: 3

the result (including double variable) obviously lose precision, but compile without any warning.
so what did the compiler do with this? or did I misunderstand something?

like image 924
OnTheEasiestWay Avatar asked Jun 30 '11 17:06

OnTheEasiestWay


1 Answers

-Wall does not enable warnings about loss of precision, truncation of values, etc. because these warnings are annoying noise and "fixing" them requires cluttering correct code with heaps of ugly casts. If you want warnings of this nature you need to enable them explicitly.

Also, your use of printf has nothing to do with the precision of the actual variables, just the precision printf is printing at, which defaults to 6 places after the decimal point.

like image 167
R.. GitHub STOP HELPING ICE Avatar answered Nov 03 '22 00:11

R.. GitHub STOP HELPING ICE