双重算术每次在C中产生随机数

时间:2014-04-09 23:55:41

标签: c math double

我是一名初学者,正在大学学习C语言,并且想知道为什么这段代码总是产生一个随机数,而不是像我期望的那样。

代码:

#include<stdio.h>

int main(void){
    double a, b = 32.5;
    a = 2 / 5 * (b - 30);
    printf("%d\n", a);
    return 0;
}

当我运行代码时,它每次都打印出一个不同的随机值:

-780835368
-1509625304
1267593528

是我得到的一些结果。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:5)

您通过尝试通过整数格式说明符%d打印双精度来调用undefined behavior。请改用浮点说明符:

printf("%f\n", a);

  

我累了,但它只打印0.000000?

由于2 / 5 - 执行integer division,从而产生0。因此,a被分配给0。您可能希望2.0 / 5.0执行真正的除法。