gpt4 book ai didi

c - double 的分配值和输出值之间的差异

转载 作者:行者123 更新时间:2023-11-30 18:55:20 25 4
gpt4 key购买 nike

我对编程很陌生,所以,如果我没有使用确切的术语来表达,请原谅..

我尝试以不同的值输出 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 完全改变。

请帮我解决这个困惑..

提前致谢..

最佳答案

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

此行为是以下原因之一造成的:

  1. 十进制数的二进制表示可能不准确。
  2. 所使用的数字之间存在类型不匹配(例如, 混合 float 和 double)。

为了解决此问题,大多数程序员要么确保该值大于或小于所需的值,要么获取并使用二进制编码十进制 (BCD) 库来保持精度。浮点值的二进制表示会影响浮点计算的精度和准确度。

取自:Why Floating point number loose precision

关于c - double 的分配值和输出值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27854642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com