cのpow関数に問題があります。変数 Qb は間違った出力を与えます - 177827.941004 の代わりに 10000 を与えるので、最終出力は 2009 ではなく 2007 になります。
コンパイルコマンドは by.
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;
}
しかし、2100/400 を 5.25 にハードコードすると、正しく動作します。私はすでに最後に -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, 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;
}