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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Partager