Bonjour à tous,
j'ai crée un programme pour calculer des rapports de vitesses d'un véhicule et j'ai quelque doute sur la précision des résultats sans toutefois en être certains (je veux juste m'assurer que je n'introduit pas d'erreurs d'arrondie ou d'imprécision dans mes calculs :
Tout d'abord j'utilise des Single partout ou je pourrais avoir des chiffres à virgules...en me disant que cela me donne une précision suffisante (avec assez de chiffres significatifs) pour les valeurs que je souhaite afficher du style (253,612 km/h) par exemple.
En voulant vérifier je m'appercois que les valeurs des variables affichées dans l'intellisense et dans l'onglet "Automatique" semble imprécise. Pourquoi 5.44444466 ???
Pourquoi à priori on ne peux pas se fier à ces résultats ?
Est ce que la valeur de 5.444445 est la représentation réelle du chiffre stocké en mémoire ? Il me semble que le type single est plus précis que ça...
En faisant l'opération inverse je constate que le résultat attendue de 49 est strictement identique au chiffre de départ, autrement dit l'opération intermédiaire n'a introduit aucune approximation (et ça c'est une bonne chose), est ce un hazard ou doit t'on s'attendre à ce type de comportement quelque que soit le calcul ?
Beaucoup de question mais j’espère que vous pourrez m’éclairer un peu sur ces quelques points.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim A As Integer Dim B As Integer Dim x As Single A = 49 B = 9 x = CSng(A / B) ' l'intellisense affiche x=5.44444466 Debug.Print(CStr(x)) ' affiche 5.444445 Debug.Print(CStr(B * x)) ' affiche 49 (le résultat final est correct)
Partager