将两个双精度值相加时出现算术错误

Rya*_*ott 1 c# math 64-bit

可能的重复:Java 中的
浮点不准确示例
双算术和相等

我在尝试调试检查两个值是否相等的排序例程时发现了这个问题。获取值只是对两个双变量进行一些加法:0.31 + 0.27。

当排序将这两个的总和与另一个对象的总和也等于 0.58 进行比较时,它告诉我比较不相等。查看第一个对象的总和,我看到它列为 0.58000000000000007。想知道它是否与我的代码有关,我创建了一个简单的控制台应用程序来测试它:

static void Main(string[] args)
    {
        double val1 = .31;
        double val2 = .27;

        Console.WriteLine("Value 1: " + val1);
        Console.WriteLine("Value 2: " + val2);

        double added = val1 + val2;

        if (!added.Equals(.58))
            Console.WriteLine("Added value is not .58!");
        else
            Console.WriteLine("Added value is .58");


        Console.WriteLine("Press any key to exit.");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

在我的机器上运行它,它又是 0.58000000000000007。我有一个同事做同样的事情,并提出了相同的输出。

有没有人遇到过这个?我们都运行 64 位 Windows 7,这是在 C# 中完成的 - 我没有在其他场景中测试过。

Pen*_*One 5

这是与事实,这样做.31.27没有确切的二进制表示。我发现这篇文章很有用。