J'ai un problème avec la fonction pow dans c. La variable Qb donnera une mauvaise sortie - elle donne 10000 au lieu de 177827.941004 résultant en la sortie finale de 2007 au lieu de 2009la fonction pow en C ne reconnaît pas la variable
La commande de compilation est par. gcc -ggdb -std=c99 -Wall -Werror -o test_pow02 test_pow02.c -lm
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
int my_rating = 2000;
int opponent_rating = 2100;
int coeff = 15;
int score = 1;
int new_rating;
double Qa = pow(10, my_rating/400); // 100000
double Qb = pow(10, opponent_rating/400); // 177827.941004
double Ea = Qa/(Qa + Qb);
new_rating = my_rating + ((score - Ea) * coeff);
printf("Qa is %g\n", Qa);
printf("Qb is %g\n", Qb);
printf("New Rating is %d\n", new_rating);
return 0;
}
Mais si je Hardcoded 2100/400 en 5.25, il fonctionnera correctement. J'ai déjà -lm à la fin. Comment puis-je réparer ça?
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
int my_rating = 2000;
//int opponent_rating = 2100;
int coeff = 15;
int score = 1;
int new_rating;
double Qa = pow(10, my_rating/400); // 100000
double Qb = pow(10, 5.25); // 177827.941004
double Ea = Qa/(Qa + Qb);
new_rating = my_rating + ((score - Ea) * coeff);
printf("Qa is %g\n", Qa);
printf("Qb is %g\n", Qb);
printf("New Rating is %d\n", new_rating);
return 0;
}
Je supprimer le suffixe 'f'. 'pow' va quand même travailler avec des doubles donc il n'y a pas de raison de descendre à la précision 'float'. –