Aller au contenu

Erreurs de calcul⚓︎

Cause des erreurs de calcul⚓︎

Les nombres décimaux en Python

Python utilise la virgule flottante en double précision pour représenter les nombres réels (64 bits). Il y a donc des erreurs de calculs possibles. Par exemple :

>>> 0.1*3 == 0.3
False

Ce n'est bien entendu pas la réponse attendue. On peut demander les valeurs des deux expressions :

>>> 0.3
0.3
>>> 0.1*3
0.30000000000000004

On remarque qu'effectivement, ces valeurs ne sont pas égales. Et surtout, 0.1*3 a une valeur incorrecte.

Obtenir plus de détails avec les f-strings

On pourrait se demander pourquoi, dans l'exemple précédent, une des valeurs est correcte et pas l'autre. En fait, aucune des deux valeurs n'est correcte. Pour s'en rendre compte, il faut utiliser les f-strings qui permettent, entre autre, d'afficher un nombre donné de chiffres après la virgule.

La syntaxe générale est f"{expression:format}". Pour afficher n chiffres après la virgule, il faut utiliser le format .n.

>>> f"{0.3:.55}"
'0.299999999999999988897769753748434595763683319091796875'
>>> f"{0.1*3:.55}"
'0.3000000000000000444089209850062616169452667236328125'

Il n'y a pas autant de chiffres affichés pour les deux nombres. C'est probablement parce que dans le deuxième, les chiffres manquants sont des 0.

On remarque que 0.3 est un petit peu plus proche de la vraie valeur.

Vous pouvez tester ci-dessous :

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

Pour une description plus détaillée des f-strings, vous pouvez consulter cette page

L'écriture scientifique en Python

On peut déterminer l'écart entre les deux nombres en faisant la différence :

>>> 0.1*3 - 0.3
5.551115123125783e-17

On obtient un nombre en écriture scientifique. La notation e-17 correspond à \(\times 10^{-17}\).

>>> 1.7e2
170.0
>>> 1.7e-8
1.7e-08

L'utilisation d'un nombre en écriture scientifique transforme automatiquement le nombre en réel. Mais si le nombre est entier, sa valeur sera exacte.

>>> f"{1.7e2:.60}"
'170.0'
>>> f"{17e-1:.60}"
'1.6999999999999999555910790149937383830547332763671875'

Vous pouvez tester ci-dessous :

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

Attention aux tests d'égalité avec des nombres décimaux

Il n'est pas conseillé de tester des égalités sur des réels. Il vaut mieux vérifier que leur différence est infinitésimale.

>>> abs(0.3 - 0.1*3) < 1e-16
True
>>> abs(0.1*3 - 0.3) < 1e-16
True
La fonction abs

La fonction abs donne la valeur absolue du paramètre, c'est-à-dire la valeur sans le signe. Il n'est donc pas nécessaire de connaître à l'avance laquelle des deux valeurs est la plus grande.

>>> abs(-7)
7
>>> abs(5-7)
2

Application⚓︎

La fonction pythagore_base

On considère la fonction suivante qui permet de déterminer si les longueurs a, b et c, c étant la plus grande, permettent de former un triangle rectangle dont les côtés mesurent a, b et c.

def pythagore_base(a, b, c):
    return a**2 + b**2 == c**2

On peut remarquer que la fonction donne le résultat attendu avec des valeurs entières, mais que ce n'est pas forcément le cas avec des valeurs réelles.

>>> pythagore_base(3, 4, 5)
True
>>> pythagore_base(0.3, 0.4, 0.5)
True
>>> pythagore_base(0.03, 0.04, 0.05)
False

Vous pouvez tester la fonction ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : /∞

Exercice 1

Modifier la fonction pythagore_base pour qu'elle donne la bonne réponse, en utilisant une marge d'erreur de \(10^{-16}\).

>>> pythagore_base(0.3, 0.4, 0.5)
True
>>> pythagore_base(0.3, 0.4, 0.500000000001)
False
>>> pythagore_base(0.03, 0.04, 0.05)
True

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : 5/5

43908.43996.43997.43980.43993.43985.43988.43979.43928.43995.43988.43993.43979.43979.43909.43930.43980.43985.43976.43930.43910.43954.43908.43979.43981.43989.43989.43993.43978.43969.43910.44011.43991.43988.43981.43980.43985.43991.43990.43908.43927.43979.43981.43989.43989.43993.43978.43969.43910.43954.43908.43996.43985.43982.43928.43989.43993.43978.43987.43996.43991.43983.43990.43909.43930.43913.43930.43928.43979.43980.43969.43988.43997.43909.43930.43989.43993.43978.43999.43985.43990.43906.43913.43926.43919.43997.43989.43928.43913.43997.43989.43930.43928.43910.43954.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43930.43910.43908.43980.43993.43994.43988.43997.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43980.43993.43994.43988.43997.43930.43910.43908.43980.43978.43910.43908.43980.43984.43928.43995.43991.43988.43979.43976.43993.43990.43909.43930.43914.43930.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.90037.43928.44008.43978.43991.43976.43991.43979.43985.43980.43985.43991.43990.43928.43996.43997.43928.43995.43991.43978.43978.43997.43995.43980.43985.43991.43990.43908.43927.43979.43976.43993.43990.43910.43908.43927.43980.43984.43910.43908.43927.43980.43978.43910.43908.43980.43978.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43979.43930.43910.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43996.43985.43982.43930.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43995.43991.43996.43997.43930.43910.43908.43996.43985.43982.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43995.43991.43996.43997.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43996.43997.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43998.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43994.43930.43910.43993.43994.43979.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43922.43922.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43923.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43922.43922.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43925.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43922.43922.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43934.43988.43980.43907.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43998.43930.43910.43913.43997.43925.43913.43918.43908.43927.43979.43976.43993.43990.43910.43954.43908.43927.43995.43991.43996.43997.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43927.43980.43978.43910.43908.43927.43980.43993.43994.43988.43997.43910.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43997.43980.43993.43985.43988.43979.43910
Exercice 2

Compléter la fonction pythagore qui prend en paramètres 3 nombres et qui renvoie un booléen indiquant s'il est possible de former un triangle rectangle dont les côtés correspondent aux 3 longueurs. Les nombres peuvent être donnés dans n'importe quel ordre.

Vous pouvez, et devriez, utiliser pythagore_base.

>>> pythagore(0.3, 0.5, 0.4)
True
>>> pythagore(0.5, 0.4, 0.3)
True
>>> pythagore(0.4, 0.5, 0.30000000000001)
False

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : 5/5

43908.43996.43997.43980.43993.43985.43988.43979.43928.43995.43988.43993.43979.43979.43909.43930.43980.43985.43976.43930.43910.43954.43908.43979.43981.43989.43989.43993.43978.43969.43910.44011.43991.43988.43981.43980.43985.43991.43990.43928.43934.43993.43989.43976.43907.43928.44010.43997.43989.43993.43978.43977.43981.43997.43979.43908.43927.43979.43981.43989.43989.43993.43978.43969.43910.43954.43908.43996.43985.43982.43928.43989.43993.43978.43987.43996.43991.43983.43990.43909.43930.43913.43930.43928.43979.43980.43969.43988.43997.43909.43930.43989.43993.43978.43999.43985.43990.43906.43913.43926.43919.43997.43989.43928.43913.43997.43989.43930.43928.43910.43954.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43930.43910.43908.43980.43993.43994.43988.43997.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43980.43993.43994.43988.43997.43930.43910.43908.43980.43978.43910.43908.43980.43984.43928.43995.43991.43988.43979.43976.43993.43990.43909.43930.43914.43930.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.90037.43928.44008.43978.43991.43976.43991.43979.43985.43980.43985.43991.43990.43928.43996.43997.43928.43995.43991.43978.43978.43997.43995.43980.43985.43991.43990.43908.43927.43979.43976.43993.43990.43910.43908.43927.43980.43984.43910.43908.43927.43980.43978.43910.43908.43980.43978.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43979.43930.43910.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43996.43985.43982.43930.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43915.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43916.43908.43927.43979.43976.43993.43990.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43995.43991.43996.43997.43930.43910.43908.43996.43985.43982.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43995.43991.43996.43997.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43996.43997.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43998.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43983.43930.43910.43991.43978.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43983.43930.43910.43991.43978.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43921.43908.43927.43979.43976.43993.43990.43910.43954.43908.43927.43995.43991.43996.43997.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43927.43980.43978.43910.43908.43927.43980.43993.43994.43988.43997.43910.43908.43927.43996.43985.43982.43910.43954.43908.43976.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43978.43997.43989.44007.43998.43993.43987.43997.44007.43984.43915.43930.43910.44010.43997.43989.43993.43978.43977.43981.43997.43979.43928.43906.43908.43927.43979.43976.43993.43990.43910.43908.43927.43976.43910.43954.43908.43976.43910.43988.43985.43999.43990.43997.43928.43982.43985.43996.43997.43908.43927.43976.43910.43954.43908.43976.43910.44017.43988.43928.43979.43981.43998.43998.43985.43980.43928.43996.43997.43928.43980.43997.43979.43980.43997.43978.43928.43988.43997.43979.43928.43915.43928.43976.43991.43979.43979.43985.43994.43985.43988.43985.43980.43857.43979.43928.43976.43991.43981.43978.43928.43988.43997.43928.43995.43852.43980.43857.43928.43988.43997.43928.43976.43988.43981.43979.43928.43988.43991.43990.43999.43926.43908.43927.43976.43910.43954.43908.43976.43910.44023.43990.43928.43976.43997.43981.43980.43928.43993.43981.43979.43979.43985.43928.43995.43991.43989.43989.43997.43990.43995.43997.43978.43928.43976.43993.43978.43928.43980.43978.43991.43981.43982.43997.43978.43928.43988.43993.43928.43976.43988.43981.43979.43928.43999.43978.43993.43990.43996.43997.43928.43988.43991.43990.43999.43981.43997.43981.43978.43928.43906.43908.43927.43976.43910.43954.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43930.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43995.43991.43996.43997.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43996.43997.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43998.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43985.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43934.43999.43980.43907.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43983.43930.43910.43993.43990.43996.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43934.43999.43980.43907.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43997.43988.43985.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43934.43999.43980.43907.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43997.43988.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43976.43969.43980.43984.43993.43999.43991.43978.43997.44007.43994.43993.43979.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43995.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43908.43927.43995.43991.43996.43997.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43954.43908.43976.43910.43988.43985.43999.43990.43997.43928.43982.43985.43996.43997.43908.43927.43976.43910.43954.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43997.43980.43993.43985.43988.43979.43910