【问题标题】:C math not respecting declared constantsC数学不尊重声明的常量
【发布时间】:2013-09-29 17:49:13
【问题描述】:

堆栈溢出,

我正在尝试编写一个(非常)简单的程序,该程序将用于显示机器精度和触发器如何影响它们的根。我的代码如下:

#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 等于零。一开始我以为我的机器可能不尊重精度水平,但是在打印x后我发现x的值每次运行程序时都会发生变化,并且总是很大(abs(x) &gt; 1e6)

我将它声明为常量,所以我对发生的事情更加困惑......

仅供参考,我正在使用 gcc -lm 进行编译

【问题讨论】:

  • 不要用%d打印floats。

标签: c gcc floating-point printf


【解决方案1】:
printf("sum = %d", sum);

sumfloat,而不是 int。您应该使用%f 而不是%d。这里也一样:

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

Reading 关于printf() 格式说明符可能是个好主意。

【讨论】:

  • 使用-Wall 编译也会有所帮助。如果您至少阅读了警告。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
相关资源
最近更新 更多