This does not make any sense. In case of overflow or divide by zero, .NET should throw an exception or at least return an error code or bool (like TryParse). I think many would agree that it is difficult to anticipate that a framework would return infinity. This is because there is nothing really called infinity in computer science (How it will be represented in memory!). Furthermore, I cannot really do anything with it, I cannot use it as an input in another equation. This problem happened due to a bug that result in calling Math.Log(0).
What do I miss here?
https://docs.microsoft.com/en-us/dotnet/api/system.double.isinfinity?view=net-6.0
CodePudding user response:
You have 2 different cases:
- When result is some kind of integer or
decimal
, DivideByZeroException exception will be thrown:
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;
- When result is some kind of floating point, no exception will be thrown and there are 3 possible outcomes:
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;
In case of Math.Log()
we deal with floating point values (double
) for both argument and result, that's why
Math.Log(0.0) == double.NegativeInfinity
Note as well
Math.Log(-1.0) == double.NaN
is quite natural implementation;