假设 a-b (a,b,c是C#的 double )。是否保证 a ?
谢谢!
编辑
假设与以下示例不同,不会发生算术溢出:double a = 1L << 53;
double b = 1;
double c = a;
Console.WriteLine(a - b < c); // Prints True
Console.WriteLine(a < b + c); // Prints False
想象 Math.Abs(a)
最佳答案
否。假设 a = c,一个非常大的数字,而 b 是一个非常小的数字。 a - b 的表示可能小于 a ,但 a + b 与 a 非常接近(并且更大),以至于它最终仍然可以最精确地表示为 a 。
下面是一个例子:
double a = 1L << 53; double b = 1; double c = a; Console.WriteLine(a - b < c); // Prints True Console.WriteLine(a < b + c); // Prints False
编辑:
这是另一个示例,它与您编辑的问题相匹配:
double a = 1.0; double b = 1.0 / (1L << 53); double c = a; Console.WriteLine(a - b < c); // Prints True Console.WriteLine(a < b + c); // Prints False
换句话说,当我们从 1 中减去一个很小的数时,我们得到的结果小于 1。当我们将相同的数加到 1 时,由于 double 的限制,我们只会得到 1。
关于C# double 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3634403/