NaN, Infinity en Divide by Zero in VB.NET

Beginnende programmeerboeken bevatten meestal deze waarschuwing: "Deel niet door nul! U krijgt een runtime-fout!"

De dingen zijn veranderd in VB.NET. Hoewel er meer programmeeropties zijn en de berekening nauwkeuriger is, is het niet altijd eenvoudig om te zien waarom dingen gebeuren zoals ze gebeuren.

Hier leren we hoe om te gaan met deling door nul met behulp van de gestructureerde foutafhandeling van VB.NET. En onderweg behandelen we ook de nieuwe VB.NET-constanten: NaN, Infinity en Epsilon.

Wat gebeurt er als u 'Divide By Zero' uitvoert in VB.NET

Als u een 'delen door nul'-scenario uitvoert in VB.NET, krijgt u dit resultaat:

 Dim a, b, c As Double

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Heb rekenregels" _

 & vbCrLf & _

 "ingetrokken?" _

 & vbCrLf & _

 "Deling door nul " _

 & vbCrLf & _

 "moet mogelijk zijn!") 

Wat is hier aan de hand? Het antwoord is dat VB.NET je eigenlijk het wiskundig correcte antwoord geeft. Wiskundig jij kan delen door nul, maar wat je krijgt is "oneindig".

 Dim a, b, c As Double

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Het antwoord is: " _

 & c)

 'Wordt weergegeven:

 'Het antwoord is: oneindig 

De waarde "oneindig" is niet al te handig voor de meeste zakelijke toepassingen. (Tenzij de CEO zich afvraagt ​​wat de bovengrens van zijn aandelenbonus is.) Maar het voorkomt dat uw applicaties crashen op een runtime-uitzondering zoals minder krachtige talen doen.

VB.NET biedt u nog meer flexibiliteit doordat u zelfs berekeningen kunt uitvoeren. Bekijk dit eens:

 Dim a, b, c As Double

 a = 1: b = 0

 c = a / b

 c = c + 1

 'Infinity plus 1 is

 'nog steeds oneindig 

Om wiskundig correct te blijven, geeft VB.NET u het antwoord NaN (geen nummer) voor sommige berekeningen zoals 0/0.

 Dim a, b, c As Double

 a = 0: b = 0

 c = a / b

 Console.WriteLine (_

 "Het antwoord is: " _

 & c)

 'Wordt weergegeven:

 'Het antwoord is: NaN 

VB.NET kan ook het verschil zien tussen positieve oneindigheid en negatieve oneindigheid:

 Dim a1, a2, b, c As Double

 a1 = 1: a2 = -1: b = 0

 If (a1 / b)> (a2 / b) Dan _

 Console.WriteLine (_

 "Positieve oneindigheid is" _

 & vbCrLf & _

 "groter dan" _

 & vbCrLf & _

 "negatieve oneindigheid.") 

Naast PositiveInfinity en NegativeInfinity biedt VB.NET ook Epsilon, de kleinste positieve dubbele waarde groter dan nul.

Houd er rekening mee dat al deze nieuwe mogelijkheden van VB.NET alleen beschikbaar zijn met floating-point (Double of Single) datatypes. En deze flexibiliteit kan leiden tot verwarring bij Try-Catch-Eindelijk (gestructureerde foutafhandeling). De .NET-code hierboven wordt bijvoorbeeld uitgevoerd zonder enige uitzondering te maken, dus het coderen in een Try-Catch-Eind-blok helpt niet. Als u wilt testen op delen door nul, moet u een test coderen zoals: