Risparmi il seguente codice ed osservazioni:incoerenza nel comportamento di divisione per zero tra diversi tipi di valore
Console.WriteLine(1/0); // will not compile, error: Division by constant zero
int i = 0;
Console.WriteLine(1/i); // compiles, runs, throws: DivideByZeroException
double d = 0;
Console.WriteLine(1/d); // compiles, runs, results in: Infinity
posso capire il compilatore controlla attivamente per divisione per costante zero e la DivideByZeroException in fase di esecuzione, ma:
Perché utilizzare un doppio in un ritorno infinito di divisione per zero anziché generare un'eccezione? È questo di progettazione o è un bug?
Solo per i calci, ho fatto questo in VB.NET e, con risultati "più coerenti":
dim d as double = 0.0
Console.WriteLine(1/d) ' compiles, runs, results in: Infinity
dim i as Integer = 0
Console.WriteLine(1/i) ' compiles, runs, results in: Infinity
Console.WriteLine(1/0) ' compiles, runs, results in: Infinity
EDIT:
sulla base del feedback di kekekela Ho eseguito il seguente che ha portato nell'infinito:
Console.WriteLine(1/
.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Questo test sembra corroborare l'idea e un doppio letterale di 0.0
è in realtà una frazione molto, molto piccola che risulterà in Infinity ...
Ecco il mio articolo sull'argomento: http://blogs.msdn.com/b/ericlippert/archive/2009/10/15/as-timeless-as-infinity.aspx –
@EricLippert cool! – Jalal