On a parfois besoin de faire des calculs sur des nombres décimaux (ou nombres à virgule flottante), et non seulement entiers. Pour cela, on dispose de trois types à virgule flottante, nommés float
, double
et long double
. Ils se distinguent par la taille quils occupent et la précision quils autorisent.
Une variable de type float
occupe quatre octets, peut varier de ±3.4 10-38 à ±3.4 1038, et a une précision denviron sept chiffres décimaux. Une variable de type double
occupe huit octets, peut varier de ±1.7 10-308 à ±1.7 10308, et a une précision denviron quinze chiffres décimaux. Enfin une variable de type long double
occupe dix octets, peut varier de ±3.4 10-4932 à 3.4 104932 et a une précision denviron dix-neuf chiffres décimaux.
À ces intervalles de valeurs il faut ajouter quatre valeurs spéciales, 0
, +infini, -infini et NaN
(not a number, pas un nombre). Les trois dernières sont générées en cas de débordement de capacité, ou dopération interdite (0/0
par exemple). En principe, de telles valeurs ne sont jamais vues car elles provoquent larrêt du programme avec un message. Toutefois, ce comportement par défaut peut être modifié par les routines signal
et matherr
. Par défaut, les dépassements de capacité par le bas ne sont pas interceptés : ils renvoient simplement la valeur 0
.
Les entiers sont automatiquement convertis en décimaux lorsquune opération fait intervenir ces deux types de variables. Inversement, des affectations comme celle-ci :
float f = 2.6;int i = f;
sont tout à fait autorisées. Elles ont pour conséquence une troncature de la valeur à virgule flottante, par suppression des décimales. En conséquence, i
vaudra 2 après linitialisation ci-dessus. De plus, lorsquil y a débordement de capacité des entiers, seuls les bits les moins significatifs sont conservés, comme pour les autres opérations. Donc, si f
était initialisé à 65 789.9 par exemple, i
serait initialisé à 253 = 65 789 modulo 65 536. Toutefois, si le nombre décimal est plus grand que la plus grande valeur entière possible (232 -1), le programme sinterrompt en indiquant une erreur (overflow, cest-à-dire débordement).
Précédent | Sommaire | Suivant |