En el lenguaje de programación C, la constante de coma flotante es de tipo doble
por lo que 3.1415
es de tipo doble, a menos que use el sufijo 'f' o 'F' para indicar el tipo de letra flotante.Asignar constante doble a variable flotante sin advertencia en C?
Supongo que const float pi = 3.1415
causará una advertencia, pero en realidad no.
cuando intento esto bajo gcc -Wall con:
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);
el resultado es:
f: 3.141593
d: 3.141593
f: 3.141593
i: 3
el resultado (incluyendo doble variable), obviamente, perder precisión, pero compilar sin ninguna advertencia.
Entonces, ¿qué hizo el compilador con esto? o no entendí bien algo?
La naturaleza variable de 'printf' asegura que los flotantes se convierten implícitamente en dobles cuando se pasan? –
Sí, aunque eso no tiene relación con la pregunta de OP. –
Me pregunto cuál es mayor: la cantidad de errores que atrapan los mensajes de "posible pérdida de precisión del doble al flotar" o la cantidad de errores que se producen al codificar un programador que tiene que forzar explícitamente muchas cosas para que "flote" el compilador feliz, también obliga a 'flotar 'algo que no debería haber sido [por ejemplo, 'const float oneTenth = 1.0f/10.0f; float value1 = 8.0f * oneTenth; double value2 = 4.0f * oneTenth; 'Tenga en cuenta que si' oneTenth' podría haber sido 'double', todo habría funcionado perfectamente. – supercat