运行时浮点计算与评估计算

时间:2020-12-29 09:57:17

标签: c# visual-studio-2019

我的问题不是关于浮点计算的优点,而是关于计算方式的差异。鉴于此:

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

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

表达式的动态求值和运行时求值的区别是什么?

编辑

因为我看到有人评论说人们得到的结果与我的不同,所以这是我所看到的。

运行时的结果:

Runtime result

VS QuickWatch 评估的结果:

Eval result

LINQPad 中的结果:

LINQPad result

我的 VS 和框架版本:

VS and framework versions

1 个答案:

答案 0 :(得分:1)

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

<块引用>

使用 32Bit 编程(任何 CPU -> 首选 32Bit 选中)

enter image description here

<块引用>

使用 64 位编程

enter image description here

<块引用>

Visual Studio 是 32 位的,所以我认为这是因为 QuickWatch 是 32 位的。

<块引用>

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

enter image description here

<块引用>

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

enter image description here