C数学不尊重声明的常量

1if*_*byC 0 c floating-point printf gcc

堆栈溢出,

我正在尝试编写一个(非常)简单的程序,用于显示机器精度和触发器如何在其根周围起作用.我的代码如下:

#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;
}
Run Code Online (Sandbox Code Playgroud)

但我一直认为这sum等于零.起初我以为也许我的机器不尊重优质水平,但是在打印之后x我发现x每次运行程序时它的价值都在变化,而且总是很大(abs(x) > 1e6)

我把它宣布为常数,所以我更加困惑的是...

仅供我用gcc -lm进行编译

Ada*_*zyk 10

printf("sum = %d", sum);
Run Code Online (Sandbox Code Playgroud)

sum是一个float,而不是一个int.你应该使用%f而不是%d.同样在这里:

printf("x = %d", x);
Run Code Online (Sandbox Code Playgroud)

阅读关于printf()格式说明可能是一个好主意.

  • 使用`-Wall`进行编译也会有所帮助.如果你阅读警告,至少. (3认同)