gpt4 book ai didi

c# - Double.NaN 的变量赋值变为 Double.NegativeInfinity

转载 作者:行者123 更新时间:2023-12-04 10:47:11 27 4
gpt4 key购买 nike

当我附加 Visual Studio 调试器时,我在应用程序中偶然发现了一个奇怪的错误。

这是我想谈论的代码片段:

double lowerLimit = valueProvider.LowerLimit.Value; //valueProvider.LowerLimit.Value = Double.NaN
double upperLimit = valueProvider.UpperLimit.Value; //valueProvider.LowerLimit.Value = Double.NaN
if (Double.IsNaN(upperLimit))
{
var value = StaticClass.DeviceA.GetValue();
upperLimit = value + 0.2;
lowerLimit = value - 0.2;
}

我想从对象“valueProvider”的值中分配两个变量“lowerLimit”和“upperLimit”。对象 valueProvider 之前已从 XML 反序列化。 valueProvider 对象的两个值都是 Double.NaN。所以我的变量“lowerLimit”和“upperLimit”也将是Double.NaN,对吗?没错,但有时,它们会更改为 Double.NegativeInfinity。因此,我下面的逻辑不会被执行。

所以它看起来像这样:
double lowerLimit = valueProvider.LowerLimit.Value; //valueProvider.LowerLimit.Value = Double.NaN
double upperLimit = valueProvider.UpperLimit.Value; //valueProvider.LowerLimit.Value = Double.NaN
//lowerLimit = -Infinity
//upperLimit = -Infinity

实际上,此错误发生在此代码执行的不到 1% 中。我很确定,我不会在其他地方修改这些值。我查看了 Double 类并找到了常量 NaN、-Infinity 和 +Infinity 的声明:
public const Double NegativeInfinity = -1D / 0D;
public const Double PositiveInfinity = 1D / 0D;
public const Double NaN = 0D / 0D;

所以我的问题是:
  • 提到的常数似乎是计算出来的。处理器有没有可能搞砸这个?
  • 这种简单的变量赋值是否有可能出错?
  • 有没有更好的方法来表示 NaN?


  • 编辑:只有一个更改值发生了变化。这是在隐藏逻辑中,我已经添加了它。 “DeviceA”的对象来自我无法控制的另一个库。如果它返回 -Infinity 它将保留 -Infinity,所以我必须在那里搜索。谢谢你的帮助!

    最佳答案

    NaN 是表达式 0/0 的结果。 PositiveInfinity 和 NegativeInfinity 是 1/0 或 -1/0 等表达式的结果。因此,没有更好的方法来表示 NaN。

    在 Javascript 中,解析字符串将导致 NaN。但是在 C# 中,它会导致 Float.Parse() 异常。

    回答您的问题:

    提到的常数似乎是计算出来的。处理器有没有可能搞砸这个?不
    这种简单的变量赋值是否有可能出错?不
    有没有更好的方法来表示 NaN?不。

    关于c# - Double.NaN 的变量赋值变为 Double.NegativeInfinity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646876/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com