Dha*_*ana 1 c# floating-point floating-accuracy
我遇到了以下算术问题.
但结果与正常的数学运算不同,为什么会这样呢?
double d1 = 1.000001;
double d2 = 0.000001;
Console.WriteLine((d1-d2)==1.0);
Run Code Online (Sandbox Code Playgroud)
Nol*_*rin 14
我猜你在Jon Skeet的Brainteasers页面上找到了这个问题?这些问题的答案中列出并说明这里在同一网站上.
作为参考,这是从该页面复制的答案.
3)愚蠢的算术
计算机意味着擅长算术,不是吗?为什么打印"假"?
double d1 = 1.000001; double d2 =
0.000001; Console.WriteLine((d1-d2)==1.0);
Run Code Online (Sandbox Code Playgroud)
答案:此处的所有值都存储为二进制浮点.虽然1.0可以准确存储,但1.000001实际存储为1.0000009999999999177333620536956004798412322998046875,0.000001实际存储为0.000000999999999999999954748111825886258685613938723690807819366455078125.它们之间的差异并不完全是1.0,实际上差异也不能完全存储.