I ran the following snippet in the VS2015 C# interactive and got some very weird behavior.
> double divide(double a, double b)
. {
. try
. {
. return a / b;
. }
. catch (DivideByZeroException exception)
. {
. throw new ArgumentException("Argument b must be non zero.", exception);
. }
. }
> divide(3,0)
Infinity
> 3 / 0
(1,1): error CS0020: Division by constant zero
> var b = 0;
> 3 / b
Attempted to divide by zero.
>
Why did the method return infinity while 3 / 0 threw an error and 3 / b threw a formated error? Can I force the division to have thrown an error instead of returning infinity?
If I reformat the method to
double divide(double a, double b)
{
if ( b == 0 )
{
throw new ArgumentException("Argument b must be non zero.", new DivideByZeroException());
}
return a / b;
}
would the new DivideByZeroException contain all the same information and structure that the caught exception would?
It's because you use
System.Double.As stated by MSDN
DivideByZeroExceptionis thrown only for integral types andDecimal.That's because it is hard to define "so called" zero for Double value.
DivideByZeroException is not appropriate for floating point types. Note: You can get
NaNthough when attempting to divide by zero with a dividend of zero.