gal*_*ets 3 .net c# math double
我正在开发一个程序来进行一些浮点计算,我在.NET中偶然发现了一个有趣的舍入问题,根据哪个表达式:
0.1 + 0.2 == 0.3
Run Code Online (Sandbox Code Playgroud)
评估为false,因为:
0.1 + 0.2
Run Code Online (Sandbox Code Playgroud)
评估0.30000000000000004,而不是0.3.这严重影响了单元测试.
我确实理解为什么会发生这种情况,但我有兴趣知道的是:在处理双重算术时我应该遵循哪些最佳实践以避免在可能的情况下出现这些问题?
编辑:使用decimal类型没有帮助
摘要:感谢所有评论.不幸的是,有些人认为这个问题是如何使0.1 + 0.2等于0.3,这不是我要求的.我接受浮点运算可以返回带有变化的值.我在问什么共同策略是最佳实践,以便这种变化不会引起问题.我认为这个问题已经准备好了.
您通常会测试相等的公差.
因此,在NUnit中,您可能会写:
Assert.AreEqual(x, y, tol);
Run Code Online (Sandbox Code Playgroud)
其中tol是适当选择的公差值.其他单元测试框架将具有类似于浮点值的断言功能.
当然,您如何选择容差可能是一个巨大的话题.简而言之,为了知道使用什么容差,您需要了解有关被测计算的内容.将进行该计算的分析以确定合适的公差.
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |