je suis debutant en c et je voudrais savoir comment augmenter la precision sur les chiffres, à savoir augmenter le nombre de decimales des chiffres
suffit il de passer de float à double , voire a long double ?
qui peut m expliquer le probleme ?merci
je suis debutant en c et je voudrais savoir comment augmenter la precision sur les chiffres, à savoir augmenter le nombre de decimales des chiffres
suffit il de passer de float à double , voire a long double ?
qui peut m expliquer le probleme ?merci
Salut, fais tes calculs en double et non pas en float. Je crois que long double est la même chose que double (mais je n'en suis pas trop trop sûr).
De toute manière, en double tu peux aller jusqu'à DBL_EPSILON (#include <float.h>) alors qu'en float tu vas jusqu'en FLT_EPSILON








Ben non, evidemment (sinon ce n'est pas necessaire de l'inventer):Envoyé par salseropom
Envoyé par C ISO 99
Plus precisement, FLT_EPSILON est la plus petite valeur telle que x + FLT_EPSILON est different de x.De toute manière, en double tu peux aller jusqu'à DBL_EPSILON (#include <float.h>) alors qu'en float tu vas jusqu'en FLT_EPSILON
En general, le probleme du 'nombre de chiffres' apres la virgule se pose lorsqu'on affiche une valeur. Il faut jouer sur les formatteurs de *printf() pour changer ce nombre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 float value = 98.723; printf("%.0f\n", value); /* pas de chiffre apres la virgule */ printf("%.3f\n", value); /* trois chiffres apres la virgule */
merci pour les infos
par contre j arrive pas a trouver comment afficher un long double
car printf("%.5lf",x) ou printf("%0.5f",x) ne marchent pas si x est un long double
%Lf ou %LF apparemment : man printfEnvoyé par informatik
![]()
il semblerait qu il y ait une chose affreuse
quand j utilise un double, en fait il n est codé que sur 17 chiffres significatifs en tout et pour tout donc plus il y a de chiffres avant la virgule, moins il y en a apres la virgule; c est ce que m indique un petit programme que j ai fait
c est pas tres pratique pour le calcul numerique tout ça non ?









Je crois que Windows utilise la même représentation pour les deux types. C'est domage sur x86 car c'est un des rares (même s'il est répandu) processeur à avoir un support hard pour quelque chose de plus précis que les doubles (un flottant sur 80 bits). Linux utilise ce type. Sur ma sun au boulot, long double fait 128 bits.Envoyé par DaZumba








Oui, j'ai ete imprecis. Je voulais dire que selon la norme, long double et double sont deux types differents, avec la garantie que l'ensemble des long double soit superieur ou egal a l'ensemble des double. Il semble que certaines implementations aient choisit le 'egal' !Envoyé par Jean-Marc.Bourguet
Bonjour,
Ce n'est pas Windows, ce sont certains compilateurs, et je ne doute pas que ce soit le cas également avec Linux.Envoyé par Jean-Marc.Bourguet
La norme est claire : c'est au choix de l'implémentation.
Pour Windows :
- Visual C++ de Microsoft utilise la même taille (8 octets) pour les double et les long double.
- Pour GCC, sizeof(double) = 8. sizeof(log double) = 12, avec un piège dans ce cas : la taille effectivement utilisée = 10, les 2 octets de poids fort étant toujours à 0, et les 10 autres étant de fait au format flottant 10 octets de la FPU des processeurs Intel (peut-être d'autres procs aussi, vu que cette représentation est normalisée, je ne sais pas).
Non,Envoyé par DaZumba
FLT_EPSILON est la plus petite valeur telle que 1.0f + FLT_EPSILON est different de 1.0f.
Il faut toujours adapter le epsilon aux nombres comparées, en l'agrandissant ou le diminuant.
Partager