2013-09-29 2 views
0

StackOverflow,C математика не уважая объявлены константы

Я пытаюсь написать (очень) простую программу, которая будет использоваться, чтобы показать, как машина точность и плюхается функции эффекта вокруг их корня. Мой код выглядит следующим образом:

#include <stdio.h> 
#include <math.h> 

int main(){ 
    const float x = 2.2; 
    float sum = 0.0; 

    sum = pow(x,9) - 18*pow(x,8) + 144*pow(x,7) - 672*pow(x,6) + 2016*pow(x,5) - 
    4032*pow(x,4) + 5376*pow(x,3) - 4608*pow(x,2) + 2304*x - 512; 

    printf("sum = %d", sum); 
    printf("\n----------\n"); 
    printf("x = %d", x); 

    return 0; 
} 

Но я получаю, что sum равно нулю. Сначала я подумал, что, может быть, моя машина не уважая уровень Percision, но после печати x я обнаружил, что значение x меняется каждый раз, когда я запустить программу и всегда огромный (abs(x) > 1e6)

У меня есть он объявлен как постоянная, так что я еще больше запутался, что происходит ...

FYI Я компиляции с GCC -lm

+7

Не печатайте 'float' с '% d'. – DCoder

ответ

10
printf("sum = %d", sum); 

sum является float, не int. Вы должны использовать %f вместо %d. То же самое здесь:

printf("x = %d", x); 

Reading о printf() спецификаторов формата может быть хорошей идеей.

+3

Компиляция с '-Wall' тоже помогла бы. Если вы прочтете предупреждения, по крайней мере. – rici

Смежные вопросы