【发布时间】:2020-12-29 19:00:44
【问题描述】:
我的问题不是关于浮点计算的细微之处,而是关于它的评估方式的差异。鉴于此:
float a = 1f / 12;
int b = (int)(1f / a);
在运行时,b 将为 12。但如果我在 QuickWatch 或 LINQPad 等工具中评估它的表达式,则为 11。事实上,我无法在运行时使用 float、double 重新创建 11 的结果,或decimal;截断或Math.Floor。
表达式的动态求值和运行时求值的区别是什么?
编辑:
由于我看到人们得到与我不同的结果,这就是我所看到的。
运行时的结果:
VS QuickWatch 评估结果:
LINQPad 中的结果:
我的 VS 和框架版本:
【问题讨论】:
-
QuickWatch 是 Visual Studio 的 QuickWatch?因为我的 VS2019 QuickWatch 正确计算 12,如果我粘贴
(int)(1f / a) -
LINQPad 版本 6.11.11 (X64) 说结果是 12
-
@xanatos 这确实很有趣。我只是自己尝试了一下,并重复地得到了 11 个(在 Quickwatch 中有两个单独的条目)。您是如何参赛的?
-
简短的回答是浮点结果在运行时和位数之间并不一致。
标签: c# visual-studio-2019