刚开始学习 C#。我计划将它用于繁重的数学模拟,包括数值求解。问题是我在加减 double
以及进行比较时会出现精度损失。代码及其返回的内容(在注释中)如下:
namespace ex3
{
class Program
{
static void Main(string[] args)
{
double x = 1e-20, foo = 4.0;
Console.WriteLine((x + foo)); // prints 4
Console.WriteLine((x - foo)); // prints -4
Console.WriteLine((x + foo)==foo); // prints True BUT THIS IS FALSE!!!
}
}
}
非常感谢任何帮助和说明!
令我困惑的是 (x + foo)==foo
返回 True
。
最佳答案
查看 double
的 MSDN 引用:https://msdn.microsoft.com/en-AU/library/678hzkk9.aspx
它指出 double
的精度为 15 到 16 位。
但是 1e-20
和 4.0
之间的数字差异是 20 位。尝试在 4.0
中添加或减去 1e-20
的行为仅仅意味着 1e-20
丢失,因为它不适合在 15 到 16 位精度内。
因此,就 double
而言,4.0 + 1e-20 == 4.0
和 4.0 - 1e-20 == 4.0
.
关于c# - C#中的双重比较精度损失,加减 double 时发生精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38918595/