假设 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/

10-09 00:41