C#中双重比较精度损失,加减减双精度时发生精度损失

Mik*_* T. 5 c# precision double

刚开始学习C#.我计划将它用于繁重的数学模拟,包括数值求解.问题是我在添加和减去double时以及比较时都会出现精度损失.代码及其返回的内容(在评论中)如下:

namespace ex3
{
    class Program
    {
        static void Main(string[] args)
        {

            double x = 1e-20, foo = 4.0;

            Console.WriteLine((x + foo)); // prints 4
            Console.WriteLine((x - foo)); // prints -4
            Console.WriteLine((x + foo)==foo); // prints True BUT THIS IS FALSE!!!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助和澄清!

令我困惑的是(x + foo)==foo回报True.

Eni*_*ity 4

查看 MSDN 参考doublehttps://msdn.microsoft.com/en-AU/library/678hzkk9.aspx

它指出 adouble的精度为 15 到 16 位。

但就数字而言,1e-20和之间的差异4.0为 20 位数字。1e-20尝试添加或减去的行为4.0仅仅意味着1e-20丢失了,因为它无法容纳在 15 到 16 位的精度范围内。

所以,就目前double而言,4.0 + 1e-20 == 4.0并且4.0 - 1e-20 == 4.0