Articles

Dive into my collection of in-depth articles, research papers, and long-form content. Each publication represents hours of research, thought, and careful crafting.

Pourquoi les nombres à virgule flottante sont-ils stockés et calculés approximativement ?

User

Les nombres à virgule flottante sont calculés et stockés approximativement, parce qu'on ne peut pas stocker un nombre infini de décimales, pour nous* lorsque le nombre n'a pas une représentation finie en base 10.

  • Par exemple : 1/3 = 0,333…

On peut en fait prouver que tout nombre rationnel peut s'écrire comme une suite infinie de décimales après la virgule, mais qui cycle après un nombre fini de chiffres.

  • Par exemple : 15/7 = 2,142857142857…

Lorsque le nombre a une représentation finie en base 10, c'est en fait un “0” qui est répété à l'infinie.

  • Par exemple : 1/4 = 0,25000…

On pourrait donc être tenté de conserver les nombres sous leur forme rationnelle tout au long des calculs et ainsi, au moment d’afficher le résultat, de le calculer avec une précision arbitraire et sans erreur d'arrondi.

Mais alors on ne pourrait pas réaliser certains calculs, en particulier ceux qui donnent comme résultat des nombres dont les décimales ne constituent pas de cycle. On appelle ces nombres des irrationnels, et il y a en a beaucoup plus qu'on pourrait le penser.

*: Pour un ordinateur, le problème se pose lorsque le nombre n'a pas une représentation finie en base 2. L'exemple qui est souvent pris dans les manuels c'est 1/10 :

  • 1/10 = 0,0001100110011… en base 2

On est donc contraints d'effectuer des arrondis, dont les répercussions sont à prendre en compte dans tout programme au risque de voir apparaître des bugs extrêmement difficiles à débugguer.

  • En général : 0,1 + 0,2 = 0,3 est faux dans tout langage de programmation, tel que calculé par le processeur. Un tel code ne doit donc jamais être utilisé, on doit plutôt évaluer la différence comme étant inférieur à un certain sigma.

Question?

We'd like to hear from you.