Précision : float et double [Résolu/Fermé]

Signaler
Messages postés
12
Date d'inscription
mardi 21 mai 2013
Statut
Membre
Dernière intervention
25 juillet 2013
-
Messages postés
12
Date d'inscription
mardi 21 mai 2013
Statut
Membre
Dernière intervention
25 juillet 2013
-
Bonsoir à toutes et à tous,

Combien de chiffres après la virgule peut prendre un float? ainsi qu'un double ?

Je pense qu'un float peut prendre seulement 6 chiffres, mais à propos du double ?

Mille merci d'avance.

Amicalement,

3 réponses

Messages postés
12
Date d'inscription
mardi 21 mai 2013
Statut
Membre
Dernière intervention
25 juillet 2013

Accessoirement, j'ai résolu mon problème.

de 6 chiffres après la virgule pour le type float
de 15 chiffres après la virgule pour le type double
de 17 chiffres après la virgule pour le type long double

Bien cordialement,
Messages postés
40131
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
26 janvier 2021
9 970
Messages postés
16182
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 janvier 2021
2 775
C'est bien plus compliqué que cela, en réalité cela dépend de l'amplitude de la valeur. Si ton nombre est proche de 1 tu auras effectivement plus ou moins ce que tu as dit, mais si tu as un nombre très grand (1 000 000 par exemple) ou très petit (0.000 001 par exemple) et bien le nombre de chiffres après la virgule s'adaptera... Sachant que les calculs se font en binaire, donc parler de chiffres après la virgule (sous entendu en décimal) n'a pas vraiment de sens !

Toute la logique de la chose est expliquée ici : IEEE 754

En Java tu peux utiliser la méthode Math.ulp pour connaitre la valeur de la précision, aussi bien en float qu'en double.

System.out.println(Math.ulp(1f)); // 1.1920929E-7
System.out.println(Math.ulp(1d)); // 2.220446049250313E-16

System.out.println(Math.ulp(1000000f)); // 0.0625
System.out.println(Math.ulp(1000000d)); // 1.1641532182693481E-10

System.out.println(Math.ulp(0.000001f)); // 1.1368684E-13
System.out.println(Math.ulp(0.000001d)); // 2.1175823681357508E-22
Messages postés
12
Date d'inscription
mardi 21 mai 2013
Statut
Membre
Dernière intervention
25 juillet 2013