En Java, il existe deux types principaux pour représenter des nombres à virgule flottante : float (32 bits) et double (64 bits). float est moins précis et occupe moins de mémoire, tandis que double offre une plus grande précision et est le type par défaut préféré pour les nombres à virgule flottante.
Caractéristiques importantes :
Exemple de comparaison avec une delta :
public class DoubleComparison { public static void main(String[] args) { double a = 0.1 + 0.2; double b = 0.3; double epsilon = 1e-10; if (Math.abs(a - b) < epsilon) { System.out.println("Égal avec marge d'erreur"); } else { System.out.println("Non égal"); } } }
Question : Que va imprimer le code suivant ?
System.out.println(0.1 + 0.2 == 0.3);
Réponse : Ce code imprimera false, car le résultat de la somme 0.1 + 0.2 en format binaire IEEE 754 n'est pas égal précisément à 0.3 en raison des spécificités de stockage des fractions décimales dans les types float et double.
Histoire
Dans un grand projet financier, des compteurs d'argent étaient utilisés avec le type double. En pratique, de petites opérations entraînaient souvent une accumulation d'erreurs d'arrondi, ce qui faisait que les sommes finales différaient de quelques centimes. Le problème a été résolu en remplaçant double par BigDecimal.
Histoire
Dans un moteur de jeu, un tableau float était utilisé pour stocker les coordonnées des objets dans un monde avec de grandes valeurs. Lors de mouvements sur de longues distances, la précision de positionnement des objets a commencé à se perdre, ce qui a entraîné un "tremblement" des objets à l'écran. Le remplacement de float par double et la centrage des coordonnées ont aidé à résoudre le problème.
Histoire
Dans un programme d'analyse statistique, des valeurs doubles étaient comparées à l'aide de l'opérateur
==et un nombre inattendu de "non-correspondances" était obtenu. Après le remplacement par une comparaison avec une delta, la logique du programme a fonctionné correctement.