calcul faux avec arduino mega2560

  • Auteur de la discussion laidfroid
  • Date de début
L

laidfroid

Apprenti
bonjour.

l'affichage et le calcul avec plus de 4 décimale sont faux sur une arduino mega2560.
je ne sais pas si les calculs sont aussi erronés avec d'autre type de cartes mais sur mes deux arduino, ils ont exactement le même résultat. :sad:

voici un exemple qui ne fait rien de particulier mais qui montre le problème.

Calcul_faux.jpg
résultat en fonction de la virgule.


comme j'utilise des fonctions trigonométriques pour un projet, cela devient très gênant si les calculs sont faux. :mad:

cordialement, J.P.
 
E

erolhc

Guest
Bonjour

Pourquoi utiliser la version 1.5.2 de L'IDE ...c'est une version Beta et est utilisée pour la Due
Avec la version 1.04 aucun problème :
Untitled-1.jpg
 
C

ChristianR

Apprenti
La fonction serial.print(num, 4) ne fait pas une troncature en gardant les 4 premières décimales, mais un arrondi à la valeur la plus proche.

Donc 0.12346 sera arrondi par excès à 0.1235, c'est juste.
Ca ne concerne que l'affichage sur le serial monitor, pas les calculs.
 
E

erolhc

Guest
Carte Mega2560 avec les deux IDE
Untitled-2.jpg
Untitled-3.jpg


La Due et l'IDE 1.5.2
Untitled-5.jpg


Le résultat est meilleur sur la Due pour la 3eme ligne : la 4eme décimale est bien 1 et non pas 0 pour la Méga
Idem avec la 4me ligne l’arrondi est mal fait sur la Méga et bon sur la Due

Le calcul est exact pour les deux carte/IDE avec la division (la 7eme décimale est un 0 donc dans les deux cas cela se termine bien par 9 avec 6 décimales)
 
P

PsyKo

Ouvrier
Bonjour,

Problème classique de gestion des nombres à virgules. Il faut se méfier de l'affichage.
Afficher 0.1234679 (différence de -8.77e-10) est beaucoup plus juste que d'afficher 0.1234678 (différence de 9.12e-9).

Surtout qu'en lisant la doc arduino il faut prendre en compte le format des float : ils sont stockés sur 32 bits.

Site arduino a dit:
Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point.

Donc seulement 6 à 7 digits. De facto, la valeur 0,1234567891234 que tu entres en début de programme n'a aucun sens.

De plus,
Site arduino a dit:
Floating point numbers are not exact, and may yield strange results when compared. For example 6.0 / 3.0 may not equal 2.0.

D'ou des résultas parfois étranges.
 
L

laidfroid

Apprenti
merci pour votre aide.

mais qu'est ce que je suis nul. :smt003

je me faisais une fixation sur l'affichage, me voila rassuré. :-D

cordialement, J.P.
 
P

PsyKo

Ouvrier
laidfroid a dit:
mais qu'est ce que je suis nul. :smt003

je me faisais une fixation sur l'affichage, me voila rassuré. :-D

De nombreux développeurs se sont fait avoir avant toi.
Une fois que l'on a compris le problème, tout va mieux :)
 
Haut