46 votes

Double précision - décimales

D'après ce que j'ai lu, une valeur de type double a une précision approximative de 15 décimales. Cependant, lorsque j'utilise un nombre dont la représentation décimale se répète, comme 1,0/7,0, je constate que la variable contient la valeur 0,14285714285714285 - soit 17 positions (via le débogueur).

Je voudrais savoir pourquoi il est représenté comme 17 places en interne, et pourquoi une précision de 15 est toujours écrite à ~15 ?

4voto

spencercw Points 2439

C'est parce qu'il est converti à partir d'une représentation binaire. Ce n'est pas parce qu'il a imprimé tous ces chiffres décimaux qu'il peut représenter toutes les valeurs décimales avec cette précision. Prenez, par exemple, ceci en Python :

>>> 0.14285714285714285
0.14285714285714285
>>> 0.14285714285714286
0.14285714285714285

Remarquez comment j'ai changé le dernier chiffre, mais ça a quand même donné le même nombre.

2voto

supercat Points 25534

Dans la plupart des contextes où double sont utilisées, les calculs comporteront un certain degré d'incertitude. La différence entre 1,33333333333333300 et 1,33333333333333399 peut être inférieure à la quantité d'incertitude qui existe dans les calculs. L'affichage de la valeur de "2/3 + 2/3" sous la forme "1,3333333333333333" est susceptible d'être plus significatif que son affichage sous la forme "1,33333333333333319", puisque ce dernier implique un niveau de précision qui n'existe pas réellement.

Dans le débogueur, cependant, il est important d'indiquer de manière unique la valeur détenue par une variable, y compris les bits de précision sans signification . Il serait très déroutant qu'un débogueur affiche deux variables comme ayant la valeur "1,333333333333333" alors que l'une d'entre elles a en réalité la valeur 1,33333333333333319 et l'autre 1,333333333333294 (ce qui signifie que, bien qu'elles se ressemblent, elles ne sont pas égales). La précision supplémentaire affichée par le débogueur n'est pas susceptible de représenter un résultat de calcul numériquement correct, mais indique comment le code interprétera les valeurs détenues par les variables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X