双精度的分配和输出值的差异

时间:2015-01-09 05:54:44

标签: c

我对编程非常陌生,所以,如果我没有使用确切的条款来表达,请原谅..

我尝试输出不同值的double值,但是当我尝试执行以下操作时,值会更改,任何人都可以解释为什么会发生这种情况..

在程序中;

int main()
{
//  double i=555555.555555;             //--------------------------------(A)
//  double i=5555555555555555.555555;   //--------------------------------(B)
//  double i=555555555555555.555555;    //--------------------------------(C)

    printf("%f",i);
    printf("\n%lf",i);

    return 0;
}

的输出
line (A):
555555.555555
555555.555555

line (B): 
555555555555555.560000
555555555555555.560000

line (C):
5555555555555556.000000
5555555555555556.000000

在上面,如果我用线(A)编译,我将得到一个正确的输出。

但是,如果我尝试行(B)和(C),输出会变化,而在行(C)中,值id会完全改变。

请帮助我解决这个困惑..

先谢谢..

1 个答案:

答案 0 :(得分:2)

浮点十进制值通常没有精确的二进制表示。这是CPU如何表示浮点数据的副作用。因此,您可能会遇到一些精度损失,并且某些浮点运算可能会产生意外结果。

此行为是以下之一的结果:

  1. 十进制数的二进制表示可能不准确。
  2. 使用的数字之间存在类型不匹配(例如,     混合漂浮和双重)。
  3. 要解决此问题,大多数程序员要么确保该值大于或小于所需的值,要么他们获得并使用将保持精度的二进制编码十进制(BCD)库。 浮点值的二进制表示会影响浮点计算的精度和准确性。

    取自:Why Floating point number loose precision