浮点运算太可靠了

mco*_*eth 1 c# floating-point double-precision

我知道在现代计算机系统中执行的浮点运算并不总是与实际算术一致.我正在尝试设计一个小型的C#程序来演示这一点.例如:

static void Main(string[] args)
    {
        double x = 0, y = 0;

        x += 20013.8;
        x += 20012.7;

        y += 10016.4;
        y += 30010.1;

        Console.WriteLine("Result: "+ x + " " + y + " " + (x==y));
        Console.Write("Press any key to continue . . . "); Console.ReadKey(true);
    }
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下,xy在所述端部相等.

我是否有可能使用类似复杂度的程序演示浮点运算的不一致性,而不使用任何真正疯狂的数字?如果可能的话,我希望避免在数学上正确的值超过小数点以外的几个位置.

Dar*_*rov 5

double x = (0.1 * 3) / 3;
Console.WriteLine("x: {0}", x); // prints "x: 0.1"
Console.WriteLine("x == 0.1: {0}", x == 0.1); // prints "x == 0.1: False"
Run Code Online (Sandbox Code Playgroud)

备注:基于此,不要假设浮点运算在.NET中不可靠.