Précision : float et double

Résolu/Fermé
BittarAhmad Messages postés 12 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 25 juillet 2013 - Modifié par BittarAhmad le 24/07/2013 à 21:38
BittarAhmad Messages postés 12 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 25 juillet 2013 - 25 juil. 2013 à 13:29
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

BittarAhmad Messages postés 12 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 25 juillet 2013
Modifié par BittarAhmad le 24/07/2013 à 21:42
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,
0
baladur13 Messages postés 46399 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 26 avril 2024 13 223
24 juil. 2013 à 22:17
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 juil. 2013 à 21:59
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
0
BittarAhmad Messages postés 12 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 25 juillet 2013
25 juil. 2013 à 13:29
0