Exercice : Limite du type float
Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi
Usage de nombres flottants
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 ? :
float x,y,z;
void setup(){
Serial.begin(9600);
x=3.4028236;
y=pow(10,38);
z = x*y/y;
}
void loop(){
Serial.print("Max float : ");
Serial.println(z,8);
}
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;