Cours 2.3. Les nombres décimaux

Le type flottant

Le type flottant permet de mémoriser des nombres décimaux. Il tient son nom de la traduction anglaise de floatting point numbers (nombre à virgule flottante). Il existe 2 types permettant de coder des nombres décimaux en C. Comme pour les entiers, il convient de choisir le type approprié pour minimiser l'utilisation de la mémoire :

Type Octets Bits Minimum Maximum
float 4 32 ±10-37 ±10+37
double 8 64 ±10-307 ±10+307
long double 16 128 ±10-308 ±10+308

Remarque : Les types flottants ne supportent pas le préfixe unsigned. Par conséquent, les types unsigned float ou unsigned double n'existent pas en C.

Codage des flottants

Nous n'allons pas détailler comment les nombres décimaux sont codés en mémoire. Toutefois, il est toujours intéressant de le savoir et si ce concept vous intéresse, vous pouvez consulter cette vidéo qui explique les détails de la norme IEEE 754.

Retenez simplement deux choses importantes :

Pour aller plus loins, la vidéo ci-dessous (en anglais) explique les origines et conséquences de ces imprécisions :

Notation

La notation des nombres décimaux en C est régie par quelques régles :

Codes de format

Comme pour les entiers, il faut utiliser le code de format approprié pour afficher un flottant. Voici les code de formats relatifs à chaque type :

Type Code de format
float %f
double %lf
long double %Lf

Exercice 1

Voici un exemple qui affiche un double :

#include <stdio.h>

int main(void) {

  // Déclare et affiche la variable N
  double N=10e10;
  printf ("%lf", N);

  return 0;
}

Remplacez le type de la variable N par un float et modifiez le code de format du printf. Que constatez-vous ?

Exercice 2

Écrire un programme qui déclare une variable nombre_d_or de type double et l'initialise avec la valeur 1,6180 avant de l'afficher.

#include <stdio.h>

int main(void) {
    // Déclare le nombre d'or    
    // COMPLETER ICI

    // Affiche le nombre d'or    
    // COMPLETER ICI

    return 0;
}

Exercice 3

Écrire un programme qui déclare 2 variables a et b respectivement de types float et double. Les deux variables sont initialisées avec la valeur \(-10^{28}\) puis affichées.

#include <stdio.h>

int main(void) {
  // Déclare 2 variables (float et double)
  // COMPLETER ICI

  // Affiche les variables
  // COMPLETER ICI

  return 0;
}

Quiz

Quels types permettent de mémoriser des nombres décimaux ?

Vérifier Bravo ! Le type long float n'existe pas. Essaie encore ...

Quelle place va occuper un long double en mémoire ?

Vérifier Bravo ! Un long double occupe 16 octets (128 bits) en mémoire. Essaie encore ...

Quel type permet de mémoriser le plus grand nombre ?

Vérifier Bravo ! Évidemment, le long double permet de mémoriser de plus grands nombres. Essaie encore ...

On estime le nombre d'atomes dans l'univers à \( 10^{80} \). Quel type est le mieux adapté pour mémoriser ce nombre ?

Vérifier Bravo ! Un float n'est pas suffisant et un long int non plus. Essaie encore ...

Quel type sera le plus précis ?

Vérifier Bravo ! Grâce au mécanisme de virgule flottante, la précision croit avec le nombre de bits du type. Essaie encore ...

Pour mémoriser un nombre entre -100 et +100, quel est l'intéret d'utiliser un double plutôt qu'un float ?

Vérifier Bravo ! Un double sur 8 octets sera plus précis qu'un float sur 4 octets. Essaie encore ...

Voir aussi


Dernière mise à jour : 30/09/2021