2013-06-12 1 views
-1

У меня проблема с функцией pow в c. Переменная Qb даст неправильный вывод - она ​​дает 10000 вместо 177827.941004, что приводит к окончательному выводу 2007 вместо 2009Функция pow в C не распознает переменную

Команда компиляции выполнена. 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; 
} 

ответ

3

Операция pow(10, opponent_rating/400); не равна 177827.941004.

opponent_rating/400 == 5  

Операции с участием двух целых чисел даст целое число,
в этом случае результат 5.25 получает прикрепляемый к 5

Вы должны разделить с двойным, чтобы получить двойной результат opponent_rating/400.0, который используется в функции pow ,

+0

Я бы отказался от суффикса 'f'. 'pow' будет работать с удвоениями в любом случае, поэтому нет причин бросать точность' float'. –