ProgrammationDéveloppeur Java

Quelles sont les spécificités du travail avec les types de données float et double en Java ? Quand appliquer chacun d'eux et quels peuvent être les pièges lors du travail avec des nombres à virgule flottante ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

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.

  • Quand utiliser float : si des exigences de mémoire très strictes sont présentes (par exemple, un grand nombre de nombres dans un tableau, un appareil avec des ressources limitées).
  • Quand utiliser double : pratiquement toujours, s'il n'y a pas de restrictions particulières, car double offre une meilleure précision.

Caractéristiques importantes :

  • Les opérations à virgule flottante peuvent conduire à une accumulation d'erreurs d'arrondi.
  • N'utilisez jamais == pour comparer float/double, utilisez une comparaison avec une marge d'erreur.

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 piège

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.

Exemples d'erreurs réelles dues à une méconnaissance des subtilités du sujet


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.