我对编程非常陌生,所以,如果我没有使用确切的条款来表达,请原谅..
我尝试输出不同值的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会完全改变。
请帮助我解决这个困惑..
先谢谢..
答案 0 :(得分:2)
浮点十进制值通常没有精确的二进制表示。这是CPU如何表示浮点数据的副作用。因此,您可能会遇到一些精度损失,并且某些浮点运算可能会产生意外结果。
此行为是以下之一的结果:
要解决此问题,大多数程序员要么确保该值大于或小于所需的值,要么他们获得并使用将保持精度的二进制编码十进制(BCD)库。 浮点值的二进制表示会影响浮点计算的精度和准确性。