NaN, Infinity și Divide by Zero în VB.NET

Cărțile începând cu programarea includ de obicei acest avertisment: "Nu împărțiți la zero! Veți primi o eroare de rulare!"

Lucrurile s-au schimbat în VB.NET. Deși există mai multe opțiuni de programare, iar calculul este mai precis, nu este întotdeauna ușor de văzut de ce se întâmplă lucrurile așa cum fac.

Aici, vom învăța cum să gestionați diviziunea la zero folosind manipularea structurată a erorilor VB.NET. Și pe parcurs, acoperim și noile constante VB.NET: NaN, Infinity și Epsilon.

Ce se întâmplă dacă executați „Divide By Zero” în VB.NET

Dacă executați un scenariu „împărțiți la zero” în VB.NET, obțineți acest rezultat:

 Dim a, b, c Ca dublă

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Au reguli matematice" _

 & vbCrLf & _

 "a fost abrogat?" _

 & vbCrLf & _

 "Impartirea cu zero " _

 & vbCrLf & _

 „trebuie să fie posibil!”) 

Deci, ce se întâmplă aici? Răspunsul este că VB.NET vă oferă de fapt răspunsul corect din punct de vedere matematic. Matematic, tu poate sa împărțiți la zero, dar ceea ce obțineți este „infinitul”.

 Dim a, b, c Ca dublă

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Raspunsul este: " _

 & c)

 Afișează:

 „Răspunsul este: infinitul 

Valoarea „infinit” nu este prea utilă pentru majoritatea aplicațiilor de afaceri. (Cu excepția cazului în care CEO-ul se întreabă care este limita superioară a bonusului său de acțiuni.) Dar aceasta împiedică aplicațiile dvs. să se prăbușească cu o excepție de rulare, cum ar fi limbajele mai puțin puternice..

VB.NET vă oferă și mai multă flexibilitate permițându-vă chiar să efectuați calcule. Verificați acest lucru:

 Dim a, b, c Ca dublă

 a = 1: b = 0

 c = a / b

 c = c + 1

 „Infinity plus 1 is

 'încă la infinit 

Pentru a rămâne corect matematic, VB.NET vă oferă răspunsul NaN (Nu un număr) pentru unele calcule, cum ar fi 0/0.

 Dim a, b, c Ca dublă

 a = 0: b = 0

 c = a / b

 Console.WriteLine (_

 "Raspunsul este: " _

 & c)

 Afișează:

 „Răspunsul este: NaN 

VB.NET poate spune, de asemenea, diferența dintre infinitul pozitiv și infinitul negativ:

 Dim a1, a2, b, c Ca dublă

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

 Dacă (a1 / b)> (a2 / b) Atunci _

 Console.WriteLine (_

 "Infinitul postiv este" _

 & vbCrLf & _

 "mai mare ca" _

 & vbCrLf & _

 "infinit negativ.") 

În plus față de PositiveInfinity și NegativeInfinity, VB.NET oferă și Epsilon, cea mai mică valoare dublu pozitivă mai mare decât zero.

Rețineți că toate aceste capabilități noi ale VB.NET sunt disponibile numai cu tipuri de date cu punct flotant (dublu sau unic). Și această flexibilitate poate duce la o confuzie cu Try-Catch-Final (gestionarea structurată a erorilor). De exemplu, codul .NET de mai sus rulează fără a arunca niciun fel de excepție, astfel încât codificarea acestuia într-un bloc Try-Catch-Final nu va ajuta. Pentru a testa o împărțire cu zero, ar trebui să codați un test de genul: