Bonjour, je suis tombé sur un pb. J'arrive à l'identifier et à le corriger, mais je ne sais pas pourquoi ce que j'ai fait fonctionne. Voici mon programme (archi simple) :
la sortie est
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 #include <stdlib.h> #include <stdio.h> #include <math.h> int main() { int n=10,k=1; double b=2.,auxb=(b-1.)/b,aux1=pow(b,k); double aux2=pow(b,k-n)/(sqrt((1.+auxb*k)*aux1)); printf("aux2 = %f\n",aux2); return EXIT_SUCCESS; }
tout va bien. Maintenant, je me suis dit que k et n étaient > 0 donc je vais les modifier en mettant un unsigned devant (en fait, à terme, j'aurais des unsigned long long int car j'aurais de très grands entiers). Voici mon nouveau prgm (je n'ai que modifié la première ligne du main en y ajoutant un unsigned)aux2 = 0.001128
et là, la sortie est
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 #include <stdlib.h> #include <stdio.h> #include <math.h> int main() { unsigned int n=10,k=1; double b=2.,auxb=(b-1.)/b,aux1=pow(b,k); double aux2=pow(b,k-n)/(sqrt((1.+auxb*k)*aux1)); printf("aux2 = %f\n",aux2); return EXIT_SUCCESS; }
ce qui ne vas pas du tout. Donc pour corriger je dois faireaux2 = inf
Quand j'affiche k-n il me renvoie -9. Certes, ce sont des unsigned donc le problème vient de là (enfin je pense). Pourquoi la conversion de l'entier k-n en double n'est-elle pas automatique ? man pow me dit que la fonction pow prend deux doubles en entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double aux2=pow(b,(double) k-n)/(sqrt((1.+auxb*k)*aux1));
Merci.
Partager