为什么.Net return 无穷大?

Why does .Net return infinity?

这没有任何意义。在溢出或被零除的情况下,.NET 应该抛出异常或至少 return 错误代码或布尔值(如 TryParse)。我想很多人会同意,很难预期一个框架会 return 无穷大。这是因为在计算机科学中没有真正称为无限的东西(它将如何在内存中表示!)。此外,我不能用它做任何事情,我不能将它用作另一个方程式的输入。 发生此问题的原因是导致调用 Math.Log(0).

的错误

我在这里想念什么?

https://docs.microsoft.com/en-us/dotnet/api/system.double.isinfinity?view=net-6.0

您有 2 个不同的案例:

  1. 当结果是某种整数decimal时,将抛出DivideByZeroException异常:

The exception that is thrown when there is an attempt to divide an integral or Decimal value by zero. (bold is mine)

// DivideByZeroException
long v = 123L / 0L;

// DivideByZeroException
decimal d = 456m / 0m;
  1. 当结果是某种浮点数时,不会抛出异常并且有3种可能的结果:+Inf, NaN, -Inf:
// Positive Infinity
double Positive = 123.0 / 0.0;

// NAN - Not A Number
double NotNumber = 0.0 / 0.0;

// Negative Infinity
double Negative = -456.78 / 0.0;

Math.Log() 的情况下,我们处理参数和结果的 浮点数 值 (double),这就是为什么

 Math.Log(0.0) == double.NegativeInfinity

也请注意

 Math.Log(-1.0) == double.NaN

是很自然的实现;