int, unsigned int, et la fonction pow
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) :
Code:
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;
} |
la sortie est
Citation:
aux2 = 0.001128
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)
Code:
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;
} |
et là, la sortie est
ce qui ne vas pas du tout. Donc pour corriger je dois faire
Code:
1 2
|
double aux2=pow(b,(double) k-n)/(sqrt((1.+auxb*k)*aux1)); |
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.
Merci.