C中错误的双重计算?

时间:2011-10-20 01:05:26

标签: c double

我正在使用DevC ++ 4.9,在WinXP SP3(32位)上运行,这是代码:

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
    double value;

    int i;

    printf("Enter double: ");
    scanf("%lf", &value);
    i = value*100;
    printf("double: %lf\n", value);
    printf("int: %d\n", i);

  system("PAUSE");  
}

我输入了不同的值,结果如下:

测试1:

enter image description here

测试2:

enter image description here

测试3:

enter image description here

为什么测试1和测试2显示不同的结果??

1 个答案:

答案 0 :(得分:6)

这是由于浮点数的四舍五入:

每个计算机科学家应该知道的关于浮点运算的内容:  http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

3.07无法用二进制表示。在您的情况下,它被四舍五入到略低于3.07,因此100 * 3.07正在评估306.9999999...,它被截断为306。

同样适用于3.05。但3.06略微上升。因此100 * 3.06正确显示为306。