【发布时间】:2025-12-04 20:25:01
【问题描述】:
刚开始学习 C#。我计划将它用于繁重的数学模拟,包括数值求解。问题是在添加和减去double 以及比较时会出现精度损失。代码及其返回的内容(以 cmets 为单位)如下:
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。
【问题讨论】:
-
请记住,不建议使用
==运算符比较浮点数。请参阅this post 了解如何进行操作。 -
@Marcelo 谢谢!您能否发布答案中的链接(比较浮点数的功能)?我觉得它很有用。
-
我的评论里也有。
-
另外看看十进制类型 - 范围更小,但比双精度更好:msdn.microsoft.com/en-us/library/364x0z75.aspx