c# - 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如果有描述,请见谅,我不是说英语的。
解决方案
用基数 2(二进制)验证浮点运算是一个相当复杂的话题。
查看David Goldberg 的《每位计算机科学家应该了解的关于浮点运算的知识》,了解有关浮点表示问题的一般性讨论。
The Floating-Point Guide提供了更易于理解的解释。
查看.NET 中的浮点,了解 .NET中的浮点算术实现的描述。
验证浮点计算的陷阱着眼于验证主题:
我们在这里讨论的许多问题都是浮点算术专家所知道的。然而,它们经常被编程语言、编译器、验证技术和程序分析器的设计者忽略或误解。其中一些在 Java 的定义和 C 的最新标准以及现代硬件实现中得到了照顾,至少部分得到了照顾。然而,我们的主要目标是教育验证系统的设计人员,他们通常没有能力更改硬件实现、编程语言、使用的编译器或他们必须验证的系统的算法。
推荐阅读
- c++ - 如何使用“使用 XXX”正确转发声明结构?
- python - 如何在 Python 中显示决策树的高分辨率图片?
- multithreading - 执行器池线程大小
- audio - 有谁知道如何让 JACK 效果在 Manjaro 中工作?
- python - 创建 mysql 表 id 最佳实践
- python - python数组切片,这里发生了什么?
- parsing - 从sybase中的数字中删除逗号
- angular - ng serve 上的 Angular i18n 配置
- python - 使用 Selenium webdriver Python 打开 Instagram
- java - 如何优雅地结束 spring @Schedule 任务?