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.
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 :
La notation des nombres décimaux en C est régie par quelques régles :
12.45
-24.
3.1415
0.25
peut s'écrire .25
.e
ou E
, par exemple \( 10^6 \) s'écrit 10e6
ou 10E6
.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 |
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 ?
É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;
}
É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;
}
Quels types permettent de mémoriser des nombres décimaux ?
Quelle place occupe un long double
en mémoire ?
Quel type permet de mémoriser le plus grand nombre ?
On estime le nombre d'atomes dans l'univers à \( 10^{80} \). Quel type est le mieux adapté pour mémoriser ce nombre ?
Quel type sera le plus précis ?
Pour mémoriser un nombre entre -100 et +100, quel est l'intéret d'utiliser un double plutôt qu'un float ?