Exercice : Limite du type float

Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi

Montage

Aucun montage particulier n'est requis pour cet exercice, hormis un kit Arduino de base.

Usage de nombres flottants

Limite du type float sur Arduino

Comme il est indiqué dans la documentation, le calcul en virgule flottante est plus lent que le calcul avec des nombres entiers. Il faut donc ne l'utiliser qu'en ultime recours. Cela est lié au fait que le processeur ne possède pas d'unité de calcul en virgule flottante.

Valeur maximale pour un flottant

La documentation Arduino indique les valeurs extrêmes utilisables avec le type float

Question

Pouvez-vous expliquer pourquoi le programme suivant donne une erreur ? :

1
float x,y,z;
2
void setup(){
3
  Serial.begin(9600);
4
  x=3.4028236;
5
  y=pow(10,38);
6
  z = x*y/y; 
7
}
8
9
void loop(){
10
  Serial.print("Max float : ");
11
  Serial.println(z,8);
12
}

Question

Vérifiez la réponse à la question précédente en ne changeant qu'un seul chiffre, et ceci parmi les moins significatifs, pour que le programme précédent fonctionne correctement.

Solution

Le problème vient de la limite du type float comme indiqué dans la documentation : la valeur maximale est de 3.4028235E+38. Or, dans le programme, on calcul z = x*y/y et le premier terme, x*y, dépasse cette valeur maximale et ce qui conduit Arduino à une erreur de calcul.

Pour résoudre le problème, il suffit d'initialiser x à la valeur  x=3.4028235;