Tout le monde a oublié Pascal?
1/6rendements 0.1666666...(quelle que soit la précision prise en charge).
1 div 6 les rendements 0
On peut se demander si la règle C est une erreur. Presque tous les opérateurs arithmétiques de C, où les opérandes sont du même type, donnent un résultat du même type. Il y a quelque chose à dire pour la cohérence.
De plus, puisque C est principalement destiné au code au niveau du système, la plupart des programmes C n'utilisent pas du tout de virgule flottante. À un moment donné, l'ajout accidentel de code à virgule flottante à un programme qui n'en aurait pas besoin autrement pourrait être un problème grave. C'est probablement toujours le cas, pour les petits systèmes embarqués - qui, encore une fois, sont une cible majeure pour C.
Dans la plupart des programmes C, tronquer la division entière est probablement exactement ce que vous voulez de toute façon.
Si a 1 / 6donné un résultat à virgule flottante en C, alors:
- Ce serait une incohérence dans la langue.
- La norme devrait faire un choix arbitraire dont le type à virgule flottante à utiliser pour le résultat (
doublepeut sembler le choix naturel, mais vous pouvez préférer la précision supplémentaire long double)
- Le langage devrait encore avoir une opération de division entière; effectuer une addition en virgule flottante puis tronquer ne serait probablement pas suffisant.
C aurait pu fournir des opérateurs distincts pour les deux types de division, mais le deuxième point ci-dessus s'appliquerait toujours: lequel des trois types à virgule flottante serait utilisé pour le résultat? Et comme il est assez facile d'obtenir une division en virgule flottante si vous en avez besoin (utilisez une constante à virgule flottante pour l'un des opérandes ou les deux, ou convertissez l'un des opérandes ou les deux en type à virgule flottante), cela n'a apparemment pas été '' t considéré que important.
Dans la version 1974 du manuel C (soit 4 ans avant la publication de la première édition de K&R), Ritchie ne mentionne même pas la confusion possible:
Le binaire / opérateur indique la division. Les mêmes considérations de type que pour la multiplication s'appliquent
qui dit que si les deux opérandes sont de type intou char, le résultat est de type int.
Oui, c'est une source de confusion pour certains programmeurs C, en particulier les débutants - mais C n'est pas réputé pour être très convivial pour les novices.