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 : 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;
}
la sortie est

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 : 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;
}
et là, la sortie est

aux2 = inf
ce qui ne vas pas du tout. Donc pour corriger je dois faire

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.