【问题标题】:Why float shows exact representation when declared为什么浮点数在声明时显示精确表示
【发布时间】:2015-06-26 06:38:32
【问题描述】:

我在 articles 和 MSDN 中多次阅读到 float(或 double)没有精确表示现实世界的整数或十进制值。正确的 !这在相等性检查出错或断言简单的加法或减法测试时可见。

也有人说float没有像0.1这样的十进制值的精确表示,但是如果我们在visual studio中声明一个float,比如float a = 0.1f;,它们在调试时如何显示精确的0.1?它应该显示类似0.09999999.. 的内容。我在哪里错过了一个了解它的链接。

这是一个外行的问题,或者我可能仍然缺少一些概念!

【问题讨论】:

  • 0.1f 类似于 0.100000001490116119384765625,所以只有在第 9 个有效数字上,在最初的 1 之后你才有!= 0,而 float 只有大约 7 位精度。

标签: c# c++ .net floating-point


【解决方案1】:

它们如何在调试时显示精确的 0.1

0.1 不是浮点数的确切值。它恰好是您在原始作业中指定的内容,但这不是浮点数的值。我可以看到它令人困惑 :) 我怀疑调试器正在显示最短的字符串表示形式,它明确地以相同的值结束。

尝试使用:

float a = 0.0999999999f;

...然后我怀疑在调试器中你也会看到 that 为0.1。

因此,调试器并不是在显示“更准确”的值,而是在显示“更普遍方便”的表示。

如果你想显示 exact 存储在 float 或 double 中的值,我有some code you can use for that。

【讨论】:

  • 谢谢乔恩!我正在阅读您的文章和您指出的另一篇文章。我还运行了 DoubleConverter.cs。这一切都提出了这个问题。但现在我更清楚了。
  • 在您回答之前,我还想知道您通过编写 DoubleConverter 获得浮点数的精确表示是什么意思;因为问题 IDE 本身显示 0.1。
  • @NirajDoshi:是的 - 我的意思是 0.1 不是的确切值。我将编辑答案以使其更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多