Ce est un double et je terminerai en tant que tel, mais voici un exemple des raisons pour lesquelles cela fonctionne pour Float
mais pas pour Double
. Au lieu de regarder Double
et Float
, regardons deux nouveaux types. Eighths
et Sixteenths
. Eighths
a 3 bits pour représenter des nombres fractionnaires, afin que vous puissiez représenter 0
, 0.125
, 0.25
, 0.375
, 0.5
, 0.625
, 0.75
et 0.875
. Sixteenths
a 4 bits pour représenter les nombres fractionnaires, donc vous pouvez représenter 0
, 0.0625
, 0.125
, 0.1875
, 0.25
, et ainsi de suite. Dans les deux types de nombres, il sera nécessaire d'approcher les valeurs à virgule flottante en choisissant la valeur la plus proche de celle que vous souhaitez représenter.
Regardons donc à quoi ressemble 1.1 + 0.1
dans Eighths
et Sixteenths
.
eighths
1.1 = 1.125
0.1 = 0.125
1.2 = 1.25
1.1 + 0.1 = 1.125 + 0.125 = 1.25
si 1.1 + 0.1 == 1.2
dans Eighths
seizièmes
1.1 = 1.125
0.1 = 0.125
1.2 = 1.1875
1.1 + 0.1 = 1.125 + 0.125 = 1.25
si 1.1 + 0.1 != 1.2
dans Sixteenths
.
La plus grande précision de Sixteenths
permet de représenter plus précisément 1.2
avec une valeur plus petite lorsqu'elle est représentée en Sixteenths
.
C'est ce qui se passe avec Float
s et Double
s. Il y a plus de bits disponibles pour représenter les nombres, mais ce sont quand même des approximations. Lorsque vous faites des calculs avec ces approximations, l'erreur se combine de manière inattendue, c'est pourquoi il est mal avisé d'utiliser des comparaisons égales avec des valeurs à virgule flottante.
@Leo Dabus Celui que vous avez suggéré ne répond pas à ma question. Je sais qu'il parle de la précision du nombre à virgule flottante, mais il n'y a aucune partie de la discussion qui mentionne pourquoi float renvoie true et le double ne le fait pas. Alors s'il vous plaît examiner à nouveau et supprimer le doublon de ma question. – THCoder
Flotteur à simple précision et double à double précision. –
@Leo Dabus Je pense que c'est une question valide, je suis curieux de connaître la différence entre 'Float' et' Double' aussi. Si quelque chose il devrait être l'inverse ... –