【发布时间】:2016-05-10 13:28:09
【问题描述】:
我正在比较 C 中的简单浮点数和双精度数,特别是它们的值 8.7。现在我将 8.7 分配给每个变量,当我打印时,两个值的结果都是 8.7000。为什么编译器添加了这些零。我想问的主要问题是我没有看到更多的数字,比如隐藏在尾随零之后。我读到,由于缺乏精度,我不应该用 float 进行这样的比较,但我认为用这么小的值肯定可以存储 8.7 并具有与另一个 8.7 值进行比较所需的准确度?
我唯一担心的是它实际上在内存中的某个地方被表示为例如 8.70000003758 或其他东西,这让我的比较失败了?我尝试使用 %.20f 打印以查看可能隐藏的任何其他数字,但我认为这只是创建了原本不存在的数字,因为数字的整体准确性更改为 8.6918734634834929 或类似的东西。
【问题讨论】:
-
1/3 是一个很小的值。但是没有固定精度的十进制表示可以准确地存储它。你的推理完全无效。
-
如果你真的想看看差异,试着在 gdb 中运行应用程序并查看这两个变量。您将能够看到内部表示。您必须查看上述评论中浮点数的表示方式。
标签: c floating-point double precision floating-accuracy