Pourquoi printf autour des nombres à virgule flottante?

J’essaie d’imprimer des nombres à virgule flottante à l’aide de printf . Par exemple:

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

LA SORTIE: 76,8

Et j’ai quelques questions sur le résultat.

Tout d’abord, pourquoi n’at-il pas imprimé 76.7?

Deuxièmement, comment a-t-il arrondi le nombre?

Outre les réponses existantes, notez que de nombreux compilateurs C essaient de suivre IEEE 754 pour les problèmes de virgule flottante. IEEE 754 recommande d’arrondir en fonction du mode d’arrondi actuel pour les conversions de virgule flottante binary en virgule décimale. Le mode d’arrondi par défaut est «arrondir au plus proche et égal à égal». Certaines plates-formes de compilation ne prennent pas en compte le mode d’arrondi et arrondissent toujours selon le mode par défaut le plus proche lors des conversions de virgule flottante à décimale.

Puisque 76.75 représente exactement le nombre 7675/100, il se situe exactement à mi-chemin entre 76.7 et 76.8. Ce dernier nombre est considéré comme le numéro “même” lorsqu’on applique “arrondir au plus proche égal”. C’est probablement pourquoi votre plate-forme de compilation a choisi de générer cette représentation décimale sous forme de conversion en décimal du nombre à virgule flottante 76.75 .

C99 §7.19.6.1 La fonction fprintf

f , F

Un double argument représentant un nombre à virgule flottante est converti en notation décimale dans le style [−]ddd.ddd , où le nombre de chiffres après le caractère décimal est égal à la spécification de précision. Si la précision est manquante, la valeur est 6; Si la précision est égale à zéro et que l’indicateur # n’est pas spécifié, aucun caractère décimal n’apparaît. Si un caractère séparateur décimal apparaît, au moins un chiffre apparaît devant celui-ci. La valeur est arrondie au nombre de chiffres approprié.

Tout d’abord, pourquoi n’a-t-il pas imprimé 76.7?

Parce que la spécification de langue indique que le chiffre de poids faible sera arrondi.

comment il a arrondi le nombre? (un code aiderait)

Cela diffère d’une implémentation à l’autre. Selon la documentation ,

Le chiffre de poids faible doit être arrondi de la manière définie par l’implémentation (caractères gras ajoutés).