加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – .NET及更高版本:使用双算术的最佳实践

发布时间:2020-12-16 02:00:04 所属栏目:百科 来源:网络整理
导读:我正在开发一个程序来进行一些浮点计算,我在.NET中偶然发现了一个有趣的舍入问题,根据哪个表达式: 0.1 + 0.2 == 0.3 评估为false,因为: 0.1 + 0.2 评估为0.30000000000000004,而不是0.3.这严重影响了单元测试. 我确实理解为什么会发生这种情况,但我有兴趣
我正在开发一个程序来进行一些浮点计算,我在.NET中偶然发现了一个有趣的舍入问题,根据哪个表达式:

0.1 + 0.2 == 0.3

评估为false,因为:

0.1 + 0.2

评估为0.30000000000000004,而不是0.3.这严重影响了单元测试.

我确实理解为什么会发生这种情况,但我有兴趣知道的是:在处理双重算术时我应该遵循哪些最佳实践以避免在可能的情况下出现这些问题?

编辑:使用十进制类型没有帮助

摘要:感谢所有评论.不幸的是,有些人认为这个问题是如何使0.1 0.2等于0.3,这不是我要求的.我接受浮点运算可以返回带有变化的值.我在问什么共同策略是最佳实践,以便这种变化不会引起问题.我认为这个问题已经准备好了.

解决方法

您通常会测试相等的公差.

因此,例如,在NUnit中,您可以写:

Assert.AreEqual(x,y,tol);

其中tol是适当选择的公差值.其他单元测试框架将具有类似于浮点值的断言功能.

当然,您如何选择容差可能是一个巨大的话题.简而言之,为了知道使用什么容差,您需要了解有关被测计算的内容.将进行该计算的分析以确定合适的公差.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读