【发布时间】:2019-03-27 23:03:29
【问题描述】:
对于一个非常简单的问题,我找不到一个清晰、简单的答案!我将把我的问题分成两个版本。
在 C# 中,假设我运行以下命令:
double x = 76239.78362194721;
double y = -3;
y = x; // copied by value, as doubles are literals
//y = y + 1.4; // Version 1 of my question has these commented-out
//x = x + 1.4; // Version 2 of my question has these not commented-out
bool b = (x == y);
布尔值b 总是 是真的吗?也就是说,虽然双打之间的平等度量是不准确的,但计算机不会故意添加噪音吗?
b 能否取决于我问的是版本 1 还是版本 2? (我们可以假设 x 和 y 不接近 double 的最大值或最小值,也不接近 plus/minus epsilon。
谢谢! 〜格雷格
【问题讨论】:
-
另请参阅Is floating point arithmetic stable,这是一个与您的问题更接近的重复问题。
-
简而言之:any 双重计算可以在 any 64 位 或更高 的精度级别在 any 出于any 的原因,这可能会影响平等。 C# 只需要在分配给字段或数组元素时“四舍五入”到 64 位;本地人和临时人员可以随心所欲地进出 80 或 128 位精度。是的,这很糟糕,你应该把责任归咎于制造芯片的芯片设计者,因为这些芯片的计算成本更高。
标签: c# floating-point equality