c# - 为什么这个问题的结果不同?

标签 c# floating-point floating-accuracy

我遇到了以下算术问题。

但结果与正常的数学运算不同,为什么会这样?

double d1 = 1.000001;

double d2 = 0.000001;

Console.WriteLine((d1-d2)==1.0);

最佳答案

我想您是在 Jon Skeet 的脑筋急转弯页面上找到这个问题的吧?列出并解释了答案here在同一网站上。

作为引用,这里是从该页面复制的答案。


3) 愚蠢的算术

计算机天生就擅长算术,不是吗?为什么打印出“False”?

double d1 = 1.000001; double d2 =
0.000001; Console.WriteLine((d1-d2)==1.0);

答:这里所有的值都存储为二进制 float 。虽然 1.0 可以准确存储,但 1.000001 实际上存储为 1.0000009999999999177333620536956004798412322998046875,0.000001实际存储为 0.000000999999999999999954748111825886258685613938723690807819366455078125。它们之间的差值不完全是 1.0,实际上也不能精确地存储差值。


关于c# - 为什么这个问题的结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721002/

相关文章:

language-agnostic - 通用语言中的实数算术?

c - 理解 C 中的 Float

floating-point - 当 β = 10 且 p = 3 时,为什么 9.0 + 4.53 + 4.53 会得到 9.05?

math - float 学有问题吗?

c# - Xpath 无法解析 XML : Namespace manager or XsltContext needed

C# '?' 运算符是什么

python - 为什么 Python 中的浮点除法用较小的数字更快?

c# - 如何自定义像这样的按钮控件?

c# - 单元测试 Blazor RenderFragment 元素

python - 浮点取模问题