首页 > 解决方案 > Double进行小数运算时如何直接判断是否有错误?

问题描述

众所周知,大多数小数不能完全用Double来表示,计算小数有误。

有没有办法快速判断小数运算是否有错误,是否等于另一个小数?

如果没有,需要手工计算。当模拟计算机运算将数字转换为二进制到53位时,如何判断是否需要携带?搜索 .Net 似乎使用四舍五入到 50%,这个规则是如何在二进制中实现的?

我需要的不是小数错误的解决方法,而是如何判断小数运算是否有错误和相等。

因为是纸质比赛,希望能有一个快速的手算方法!感谢!

例如:

执行以下 Visual Basic 程序片段并将结果输出为“True” Console.WriteLine(1.1 + 1.2 = 2.3)

执行以下 Visual Basic 程序片段并将结果输出为“False” Console.WriteLine(0.3 - 0.2 = 0.1)

PS如果有描述,请见谅,我不是说英语的。

标签: c#.netvb.net

解决方案


用基数 2(二进制)验证浮点运算是一个相当复杂的话题。

查看David Goldberg 的《每位计算机科学家应该了解的关于浮点运算的知识》,了解有关浮点表示问题的一般性讨论。

The Floating-Point Guide提供了更易于理解的解释。

查看.NET 中的浮点,了解 .NET中的浮点算术实现的描述。

验证浮点计算的陷阱着眼于验证主题:

我们在这里讨论的许多问题都是浮点算术专家所知道的。然而,它们经常被编程语言、编译器、验证技术和程序分析器的设计者忽略或误解。其中一些在 Java 的定义和 C 的最新标准以及现代硬件实现中得到了照顾,至少部分得到了照顾。然而,我们的主要目标是教育验证系统的设计人员,他们通常没有能力更改硬件实现、编程语言、使用的编译器或他们必须验证的系统的算法。


推荐阅读