【问题标题】:How to directly judge whether there is any error when Double performs decimal operation?Double进行小数运算时如何直接判断是否有错误?
【发布时间】:2018-11-18 09:00:55
【问题描述】:

已知大多数小数不能完全用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)

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

【问题讨论】:

  • 仅作记录;您是要我们想出一个可以在比赛中使用的答案吗?
  • 这并不像您想象的那么容易或微不足道。这里还有不止一个问题
  • edit 将该问题限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 但这出现在主题测试中。附上原始问题。 """""22. 执行下面的Visual Basic程序片段,输出是什么? (A) 1 (B) 0 (C) True (D) False Console.WriteLine (1.1 + 1.2 = 2.3)"""" ""
  • @Cliff。然后运行它并找出答案。你为什么问我们? dotnetfiddle.net

标签: c# .net vb.net


【解决方案1】:

以 2(二进制)为底的浮点运算的验证是相当复杂的话题。

查看 David Goldberg 的 What Every Computer Scientist Should Know About Floating-Point Arithmetic,了解有关浮点表示问题的一般性讨论。

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

查看Floating Point in .NET 以了解 .NET 中浮点算术实现的描述。

The pitfalls of verifying floating-point computations进入验证话题:

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

【讨论】:

  • 先谢谢了。希望有快速的手算或判断方法。如果我没有它,我几乎不会阅读这些文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多