gpt4 book ai didi

c# - C#中的双重比较精度损失,加减 double 时发生精度损失

转载 作者:太空狗 更新时间:2023-10-29 22:57:23 27 4
gpt4 key购买 nike

刚开始学习 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-204.0 之间的数字差异是 20 位。尝试在 4.0 中添加或减去 1e-20 的行为仅仅意味着 1e-20 丢失,因为它不适合在 15 到 16 位精度内。

因此,就 double 而言,4.0 + 1e-20 == 4.04.0 - 1e-20 == 4.0 .

关于c# - C#中的双重比较精度损失,加减 double 时发生精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38918595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com