Double.MinValue,MaxValue Bad Compile Time Constant - mscorlib

时间:2014-01-01 21:06:27

标签: c# .net compiler-construction double

我一直在寻找并尝试使用dotPeek的Export To Project的功能来学习mscorlib库(4.0)的源代码,当我尝试构建它时,由于Double的MinValue和MaxValue为'Bad'而失败编译时间常数'。

[__DynamicallyInvokable]
public const double MinValue = -1.79769313486232E+308; // Bad compile time constant

[__DynamicallyInvokable]
public const double MaxValue = 1.79769313486232E+308; // Bad compile time constant

我到底错过了什么?导出编译器生成的代码会解决这个问题,还是有某种解决这个问题的幕后操作?

注意:使用Visual Studio 2013 Ultimate进行构建,我还有2012年和2010版本的Visual Studio(爱大学),不确定我使用的编译器是否会改变这个问题。

1 个答案:

答案 0 :(得分:4)

问题是为您生成常量的应用程序生成了错误的数字。正确的数字是:

    public const double MinValue = -1.7976931348623157E+308;

    public const double MaxValue = 1.7976931348623157E+308;

生成的代码将最后4位数字从3157舍入到32(00),超过了double的值。