Est ce que quelqu'un peut m'expliquer comment choisir la précision d'un float avec une fonction C?
Exemples:
theFatFunction(0.666666666, 3)
renvoie 0.667
theFatFunction(0.111111111, 3)
renvoie 0.111
Vous ne pouvez pas faire cela, car la précision est déterminée par le type de données (c'est-à-dire float
ou double
ou long double
). Si vous souhaitez l'arrondir à des fins d'impression, vous pouvez utiliser les spécificateurs de format appropriés dans printf()
, c'est-à-dire printf("%0.3f\n", 0.666666666)
.
Tu ne peux pas. La précision dépend entièrement du type de données. Vous avez float
et double
et le tour est joué.
Les flotteurs ont une précision statique et fixe. Tu ne peux pas le changer. Ce que vous pouvez parfois faire, est autour du nombre.
Voir cette page , et envisagez de vous mettre à l'échelle par des puissances de 10. Notez que tous les nombres ne sont pas exactement représentables sous forme de flottants non plus.
La plupart des systèmes sont conformes à la norme de virgule flottante IEEE-754, qui définit plusieurs types de virgule flottante.
Sur ces systèmes, float
correspond généralement au type à précision simple IEEE-754 binary32
: il a une précision de 24 bits. double
est le type binary64
à double précision; il a 53 bits de précision. La précision en nombre de bits est définie par la norme IEEE-754 et ne peut pas être modifiée.
Lorsque vous imprimez des valeurs de types à virgule flottante à l'aide de fonctions de la famille fprintf
(par exemple, printf
), la précision correspond au nombre maximal de chiffres significatifs et est définie par défaut à 6 chiffres. Vous pouvez modifier la précision par défaut avec un .
suivi d'un nombre décimal dans la spécification de conversion. Par exemple:
printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536
tandis que
printf("%f\n", 4.0 * atan(1.0)); // prints 3.141593
La précision est déterminée par le type de données (c'est-à-dire float ou double ou long double).
Si vous voulez l'arrondir à des fins d'impression, vous pouvez utiliser les spécificateurs de format appropriés dans printf (), c'est-à-dire
printf("%0.3f\n", 0.666666666) //will print 0.667 in c
Maintenant, si vous voulez l'arrondir à des fins de calcul, vous devez d'abord multiplier le flottant par 10 ^ nombre de chiffres, puis transtyper en int, puis effectuer le calcul, puis à nouveau transtyper pour flotter et diviser par la même puissance de 10
float f=0.66666;
f *= 1000; // 666.660
int i = (int)f; // 666
i = 2*i; // 1332
f = i; // 1332
f /= 1000; // 1.332
printf("%f",f); //1.332000