¿Por qué printf ronda los números de coma flotante?

Estoy tratando de imprimir algunos números de coma flotante con printf . Por ejemplo:

 int main() { printf("%.1f",76.75); return 0; } 

EL RESULTADO: 76.8

Y tengo algunas preguntas sobre el resultado.

Antes que nada, ¿por qué no imprimió 76.7?

En segundo lugar, ¿cómo redondeó el número?

Además de las respuestas existentes, tenga en cuenta que muchos comstackdores de C intentan seguir IEEE 754 para asuntos de coma flotante. IEEE 754 recomienda redondear de acuerdo con el modo de redondeo actual para las conversiones de coma flotante binario a decimal. El modo de redondeo predeterminado es “redondear al más cercano y empatar a par”. Algunas plataformas de comstackción no tienen en cuenta el modo de redondeo y siempre se redondean de acuerdo con el modo predeterminado de más cercano en conversiones de punto flotante a decimal.

Como 76.75 representa el número 7675/100 exactamente, está a medio camino entre 76.7 y 76.8. El último número se considera el “par” al aplicar “redondear al más cercano-par”. Esta es probablemente la razón por la cual su plataforma de comstackción eligió generar esta representación decimal como la conversión a decimal del número de coma flotante 76.75 .

C99 §7.19.6.1 La función fprintf

f , F

Un argumento double que representa un número de coma flotante se convierte a notación decimal en el estilo [−]ddd.ddd , donde el número de dígitos después del carácter de punto decimal es igual a la especificación de precisión. Si falta la precisión, se toma como 6; si la precisión es cero y el indicador # no se especifica, no aparece ningún carácter de punto decimal. Si aparece un carácter de punto decimal, aparece al menos un dígito delante de él. El valor se redondea a la cantidad adecuada de dígitos.

Antes que nada, ¿por qué no imprimió 76.7?

Porque la especificación del lenguaje dice que el dígito de orden baja se redondeará.

¿Cómo redondeó el número? (algún código ayudaría)

Esto difiere de implementación por implementación. De acuerdo con la documentación ,

El dígito de orden bajo se redondeará de una manera definida por la implementación (énfasis añadido).