Double.MinValue、MaxValue 错误编译时间常量 -- mscorlib

问题描述 投票:0回答:1

我一直在寻找并尝试使用 dotPeek 的导出到项目功能从 mscorlib 库 (4.0) 的源代码中学习,当我尝试构建它时,它失败了,因为 Double 的 MinValue 和 MaxValue 是“错误的编译时间”常数'.

[__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(喜欢大学),不确定我使用的编译器是否会改变这个问题。

c# .net double
1个回答
4
投票

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

    public const double MinValue = -1.7976931348623157E+308;

    public const double MaxValue = 1.7976931348623157E+308;

生成的代码将最后 4 位数字从 3157 舍入为 32(00),这超出了双精度值。

© www.soinside.com 2019 - 2024. All rights reserved.