2010-02-25 5 views

Répondre

3

Faire il while (a <= b)

opérations avec double (et les types de données lui-même) ont des problèmes avec précision. Donc, évitez d'utiliser double == double ou double! = Double expressions. Réorganisez-les avec < ou>. Probablement après la 10ème itération c est 1.00000 .. 001, au lieu de juste 1. Ceci est dû principalement à la représentation interne des types doubles.

+0

Je lis quelque part que certaines langues telles que Java se cachent la question de précision. Est-ce vrai ? –

+0

Que voulez-vous dire par "se cacher"? Il existe des types qui utilisent une représentation interne différente (pour C# - décimal) qui ne perd pas de précision. Probablement, il y a un type similaire en Java (BigDecimal convient je pense). Mais je ne suis pas sûr que la question de précision peut être cachée. Vous pouvez vérifier cet article: http://discuss.joelonsoftware.com/default.asp?design.4.346343.29 il est expliqué sur la décimale de Java et je pense que c'est toujours un problème. – anthares

1

Tous les nombres décimaux ne peuvent pas être représentés exactement en utilisant le format à virgule flottante double.

Dans votre exemple, la constante 0.1 est la racine du problème. Même si vous avez écrit 0.1 dans votre code source, la meilleure représentation en double format est 0.1000000000000000056.

Par conséquent, la comparaison ne se comparera jamais à vrai.

Notez également que non seulement les constantes ont leurs problèmes. Toutes les opérations arithmétiques (addition dans votre cas) ont aussi des problèmes de précision limités.

Questions connexes