Pas de solution directe, par construction le type double à une précision limitée et les opérations dessus sont forcément des approximations.
C'est souvent suffisant mais dans les cas ou l'on a besoin d'une très forte précision il faut soit utiliser un type plus précis comme long double, soit utiliser une bibliothèque de calcul conçue pour comme GMP.
Il est aussi souvent (toujours ?) possible de revoir son algo pour essayer de se passer au maximum des divisions, prendre en compte les erreurs, travailler avec des entiers etc ... pour ne pas avoir ce genre de problème.
On n'a même pas besoin des ordinateurs pour mal interpréter les fractions: Si je fais: 1 / 3, on dit que ça donne 0.333... à l'infini Si je fais: 1/3 *3, ça devrait donner 1, non? Si je fais: 0.333... * 3, j'obtiens 0.999... à l'infini Le hic est que les ordi n'ont pas une précision infinie.
Le Tout est souvent plus grand que la somme de ses parties.
Je rencontre un problème avec la multiplication entre double, l'opération suivante :
0.42549999999999999 * 1000 = 425.5 au lieu de 425.4
Et pourquoi ça ferait 425.4 ? le résultat et quand même nettement plus proche de 425.5
Tout à fait.
Le nombre 0.4255 ne peut pas être stocké exactement dans un double, les 2 nombres les plus proches sont 0.425499999999999989341858963598497211933135986328125 et 0.425500000000000044853010194856324233114719390869140625 (ces séquences semblent bizarres mais écrits en base 2, seul 1 bit les différencie.) Après multiplication du plus proche (le premier) par 1000. Il y aussi approximation du résultat. Là, coup de bol, le nombre le plus proche représentable dans un double tombe pile sur 425.5. L'erreur apparente a donc disparue, et on est très loin de 425.4.
En faite, je récupère une valeur réelle dans un CString, ensuite je la convertie en double (car j'ai besoin d'effectuer des opérations dessus).
Complètement d'accord avec vous, sur le fait que "0.42549999999999999 * 1000 = 425.5 au lieu de 425.4"
Mais j'ai besoin d'afficher la valeur 425.4, pour la faire correspondre exactement avec une autre valeur à 425.4.. je sais c'est bizarre mais malheureusement je n'ai pas le choix
Cependant j'ai réussi à régler mon problème en effectuant l'opération dans un type double de boost
Mais j'ai besoin d'afficher la valeur 425.4, pour la faire correspondre exactement avec une autre valeur à 425.4.. je sais c'est bizarre mais malheureusement je n'ai pas le choix
Tu peux décrire en quelques mots ce que tu veux faire ? Parce que oui, c'est bizarre
Il n'y a pas que l'affichage. Comparer deux double est hasardeux. Les deux nombres ne diffèrent peut-être que par le dermier bit, le moins significatif. Quand l'ordre de grandeur des nombre le permet, il vaut parfois mieux travailler avec des entiers.
Le Tout est souvent plus grand que la somme de ses parties.
On n'a même pas besoin des ordinateurs pour mal interpréter les fractions: Si je fais: 1 / 3, on dit que ça donne 0.333... à l'infini Si je fais: 1/3 *3, ça devrait donner 1, non? Si je fais: 0.333... * 3, j'obtiens 0.999... à l'infini Le hic est que les ordi n'ont pas une précision infinie.
Merci de me citer, ça me fait vraiment plaisir.
Et est-ce que le pot va suivre les fleurs?
Le Tout est souvent plus grand que la somme de ses parties.
Multiplication entre double
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
En recherche d'emploi.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Mon portfolio photo : https://www.instagram.com/charlievanaret_photo/
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.