![]() |
1
5
您的问题可以简化为询问为什么这两个结果不同:
如果查看.NET Reflector中的代码,可以看到上面的代码实际上是按照以下代码编译的:
不能总是精确地进行浮点计算。结果
关于你在写这封信时对我的回答的评论:
计算完全在编译器中完成。上述代码相当于:
|
![]() |
2
4
在你的评论中
对。或者说,规则允许不同的行为。
规范暗示了这一点。浮点运算的精度必须达到一定的最低水平,但允许编译器或运行时使用 更多 如果合适,则精确。当你进行放大微小变化的操作时,这会导致大的、可观察的变化。例如,舍入可以将极小的变化转化为极大的变化。 这一事实导致这里出现了相当频繁的问题。有关这种情况和其他可能产生类似差异的情况的一些背景,请参见以下内容: Why does this floating-point calculation give different results on different machines? C# XNA Visual Studio: Difference between "release" and "debug" modes? |
![]() |
3
2
马克对编译器的看法是正确的。现在让我们愚弄编译器:
第一个表达式毫无意义,但会阻止编译器进行优化。结果是:
好的,我找到了解释。
如果你改成
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |