Quelques précisions sur le type double
Bonjour,
Il y a certaines choses qui m'échappent. En effet, selon la MSDN, le type double peut contenir des chiffre allant de 1.7E-308 à 1.7E+308 or par exemple dans le code suivant que je mette la variable A de type int ou double, à partir du moment ou je dépasse 10 digits donc une valeur >= 1E11, le compilateur m'insulte en me disant : "[Warning] integer constant is too large for "long" type".
De plus quand par exemple j'envoie 1E10 à la fonction NOMBRE_DE_DIGITS, il me renvoi la valeur 9 alors que je devrais avoir 10. Si je mets 1.000.000.001, il me renvoi bien 10. Problème de précision ou ma formule est fausse. J'ai testé de 1 à 10 toute les puissances de 10 et ça ne marche pas pour les valeurs comprise entre [1E10, 1.000.000.001[.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int NOMBRE_DE_DIGITS( double VALEUR, int BASE );
int main()
{
float A=1000000000;
int B=NOMBRE_DE_DIGITS(A, 10);
printf("%d \n", B);
getchar();
}
int NOMBRE_DE_DIGITS( double VALEUR, int BASE )
{
if ( BASE <= 1 )
{
printf("\nERREUR DANS LA FONCTION NOMBRE_DE_DIGITS\n - LA BASE NE PEUT ETRE INFERIEURE OU EGALE A 1\n");
}
if ( VALEUR == 0 || VALEUR == 1)
{
return 1;
}
if ( BASE > 1 )
{
return (floor( log(abs(VALEUR))/log(BASE) ) +1);
}
} |