为什么.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 个不同的案例:
- 当结果是某种整数或
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;
- 当结果是某种浮点数时,不会抛出异常并且有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
是很自然的实现;
这没有任何意义。在溢出或被零除的情况下,.NET 应该抛出异常或至少 return 错误代码或布尔值(如 TryParse)。我想很多人会同意,很难预期一个框架会 return 无穷大。这是因为在计算机科学中没有真正称为无限的东西(它将如何在内存中表示!)。此外,我不能用它做任何事情,我不能将它用作另一个方程式的输入。 发生此问题的原因是导致调用 Math.Log(0).
的错误我在这里想念什么?
https://docs.microsoft.com/en-us/dotnet/api/system.double.isinfinity?view=net-6.0
您有 2 个不同的案例:
- 当结果是某种整数或
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;
- 当结果是某种浮点数时,不会抛出异常并且有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
是很自然的实现;