Dans le stockage habituel des flotteurs dans les langages de programmation à l'aide IEEE 754. Par conséquent, pour le stockage de certains nombres flottants qui ne peuvent pas être montrés par la somme de 2^i
, il y aurait quelques erreurs (en base 2) telles que 0.3.
Comme mentionné dans les commentaires, vous pouvez utiliser des chiffres pour trouver ces erreurs:
digits(100);
vpa(a)
>> 0.4500000000000000111022302462515654042363166809082031250000000000000000000000000000000000000000000000
vpa(b)
>> 0.05000000000000000277555756156289135105907917022705078125000000000000000000000000000000000000000000000
vpa(c)
>> -0.5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
vpa(a+b)
>> 0.5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
vpa(c+a)
>> -0.04999999999999998889776975374843459576368331909179687500000000000000000000000000000000000000000000000
Comme vous pouvez le voir dans ce qui précède, à cause de cette erreur, somme de a
et c
est pas exactement comme vous » attendu (à cause d'une erreur dans le stockage des points flottants dans la base 2 dans IEEE 754).
Par conséquent, l'ordre de +
est important que vous avez trouvé à travers ces expressions. Par conséquent, la préférence de plus est de gauche à droite, et la préférence de parenthèse est supérieure à plus, dans c + (a + b)
et a + b + c
, le a + b
est fait en premier ,. Ensuite, vous pouvez voir la somme est exacte dans le ci-dessus. Cependant, dans c + a + b
, le c + a
est arrivé plus tôt et vous pouvez voir cette somme n'est pas exacte, donc le résultat de cette somme avec b
pourrait avoir une erreur.
De cette façon, vous pouvez trouver a + c + b
n'est pas exacte que vous voulez. Et:
vpa(c + b)
>> -0.4500000000000000111022302462515654042363166809082031250000000000000000000000000000000000000000000000
Ainsi,
c + b + a
>> 0
Regardez caché les erreurs d'arrondi - https://au.mathworks.com/help/symbolic/digits.html. Cela semble simplement provenir de la précision de la distribution implicite. –