为什么 float 在声明时显示精确表示
Why float shows exact representation when declared
我在 articles 和 MSDN 中多次读到 float
(或 double
)没有真实世界整数或小数值的精确表示。正确的 !当相等性检查出错或断言简单的加法或减法测试时,这是可见的。
也有人说 float 没有像 0.1 这样的小数值的精确表示,但是如果我们在 visual studio 中声明一个像 float a = 0.1f;
这样的浮点数,它们如何显示精确的 0.1 而调试?它应该显示类似 0.09999999..
的内容。哪里漏了一个link理解一下
这是一个外行问题,或者我可能仍然缺少一些概念!
how do they show exact 0.1 while debugging
0.1 不是浮点数的准确值。它恰好是您在原始作业中指定的值,但这不是浮点数的值。我可以看到它令人困惑 :) 我怀疑调试器正在显示最短的字符串表示形式,它明确地以相同的值结束。
尝试使用:
float a = 0.0999999999f;
... 然后我怀疑在调试器中你会看到 that as 0.1
as well.
因此,调试器并不是在显示 "more exact" 值,而是在显示 "more generally convenient" 表示。
如果要显示存储在浮点数或双精度数中的 精确 值,我有 some code you can use for that.
我在 articles 和 MSDN 中多次读到 float
(或 double
)没有真实世界整数或小数值的精确表示。正确的 !当相等性检查出错或断言简单的加法或减法测试时,这是可见的。
也有人说 float 没有像 0.1 这样的小数值的精确表示,但是如果我们在 visual studio 中声明一个像 float a = 0.1f;
这样的浮点数,它们如何显示精确的 0.1 而调试?它应该显示类似 0.09999999..
的内容。哪里漏了一个link理解一下
这是一个外行问题,或者我可能仍然缺少一些概念!
how do they show exact 0.1 while debugging
0.1 不是浮点数的准确值。它恰好是您在原始作业中指定的值,但这不是浮点数的值。我可以看到它令人困惑 :) 我怀疑调试器正在显示最短的字符串表示形式,它明确地以相同的值结束。
尝试使用:
float a = 0.0999999999f;
... 然后我怀疑在调试器中你会看到 that as 0.1
as well.
因此,调试器并不是在显示 "more exact" 值,而是在显示 "more generally convenient" 表示。
如果要显示存储在浮点数或双精度数中的 精确 值,我有 some code you can use for that.