gpt4 book ai didi

c# - .NET 基本类型添加怪癖?

转载 作者:行者123 更新时间:2023-11-30 19:20:21 25 4
gpt4 key购买 nike

我很好奇,所以我运行了几个测试来了解 .NET 如何处理溢出(我在任何地方都找不到它的文档)。我几乎希望他们吐出溢出错误而不是结果,因为老实说这些结果很奇怪:

  1. Int32.MaxValue + Int32.MaxValue = -2
    我知道它环绕,但为什么这样做而不是抛出 OverflowException?这不是“未检查”是为了​​……忽略溢出吗?我对目前未检查的内容感到困惑,特别是因为我已经看到它用于创建哈希值。

  2. Double.PositiveInfinity + Double.NegativeInfinity = Double.NaN
    另一个怪事。 1 + -1 = 0。100 + -100 = 0。那么为什么 Infinity + -Infinity = NaN?

  3. Double.PositiveInfinity/Double.PositiveInfinity = Double.NaN
    再一次,为什么奇怪?我认为这应该是 1 或者可能是 0(b/c x/Infinity = 0 的极限)。事实上... Double.MaxValue/Double.PositiveInfinity = 0 ...

  4. Double.PositiveInfinity/0 = Infinity
    什么!?没有 DivideByZeroException!?

  5. Double.MaxValue + Double.MaxValue = Infinity
    是的,这个不会抛出 OverflowException,但也不会环绕?所以我想并非所有原始类型的行为都像 int 那样。奇怪的是,我可以执行诸如 Double.MaxValue + 1 = 1.79769313486232E+308 之类的操作。因此,添加超出 double 的 MaxValue 是可能的(可能会失去精度?),但在一些未知数字(可能可以计算出来 - 或者已经计算出来)之后,它失去了显示有效数字并返回 Infininty 的能力?

好吧,剩下的有点重复了。我只是想知道为什么这些以他们的方式运作?特别是 Double 运算符。能够添加到 MaxValue 之外对我来说是非常意外的。

最佳答案

  1. 是的; checked 会解决这个问题; unchecked 是默认行为
  2. 从数学上讲,您不能将 +inf 和 -inf 相加,也无法推断出一个符号。 NaN 是唯一明智的选择;然而,+inf++inf => +inf,和 -inf + -inf => -inf,就像你可能推断的那样
  3. 同样,从数学上讲,第一项是可行的。尤其是,它会导致 2*x/x=>1,这会更糟。但基本上:inf 不是数字
  4. 不,他们没有;这是 float 的预期行为
  5. float 不换行; 超过最大值就是无穷大

关于c# - .NET 基本类型添加怪癖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683146/

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