首页 > 解决方案 > 运行时浮点计算与评估计算

问题描述

我的问题不是关于浮点计算的细节,而是关于它的评估方式的差异。鉴于这种:

float a = 1f / 12;
int b = (int)(1f / a);

在运行时,b 将为 12。但如果我在 QuickWatch 或 LINQPad 之类的东西中评估它的表达式,它是 11。事实上,我无法在运行时使用 、 或 ; 重新创建 11floatdouble结果decimal。截断或Math.Floor

表达式的动态评估和运行时评估之间的区别是什么?

编辑

由于我看到有关人们得到与我不同的结果的评论,这就是我所看到的。

运行时的结果:

运行时结果

VS QuickWatch 评估的结果:

评估结果

LINQPad 中的结果:

LINQPad 结果

我的 VS 和框架版本:

VS 和框架版本

标签: c#visual-studio-2019

解决方案


我认为这是浮点计算的问题

使用 32 位的程序(任何 CPU -> 首选 32 位检查)

在此处输入图像描述

64位程序

在此处输入图像描述

Visual Studio 封装在 32 位中,所以我认为这是因为 QuickWatch 以 32 位运行。

这就像在 QuickWatch 中计算 (int)(1f/12)

在此处输入图像描述

所以我认为最好检查计算的内容

在此处输入图像描述


推荐阅读