NaN, Infinity e Divide by Zero in VB.NET

I libri di programmazione di inizio di solito includono questo avviso: "Non dividere per zero! Verrà visualizzato un errore di runtime!"

Le cose sono cambiate in VB.NET. Sebbene ci siano più opzioni di programmazione e il calcolo sia più accurato, non è sempre facile capire perché le cose accadano nel modo in cui funzionano.

Qui, impariamo come gestire la divisione per zero utilizzando la gestione strutturata degli errori di VB.NET. E lungo il percorso, copriamo anche le nuove costanti VB.NET: NaN, Infinity ed Epsilon.

Cosa succede se si esegue "Dividi per zero" in VB.NET

Se si esegue uno scenario 'dividi per zero' in VB.NET, si ottiene questo risultato:

 Dim a, b, c Come doppio

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Avere regole matematiche" _

 & vbCrLf & _

 "abrogato?" _

 & vbCrLf & _

 "Divisione per zero " _

 & vbCrLf & _

 "deve essere possibile!") 

Quindi cosa sta succedendo qui? La risposta è che VB.NET ti dà effettivamente la risposta matematicamente corretta. Matematicamente, tu può dividi per zero, ma quello che ottieni è "infinito".

 Dim a, b, c Come doppio

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "La risposta è: " _

 e c)

 'Visualizza:

 'La risposta è: infinito 

Il valore "infinito" non è troppo utile per la maggior parte delle applicazioni aziendali. (A meno che il CEO non si stia chiedendo quale sia il limite massimo del suo bonus azionario.) Ma impedisce alle applicazioni di arrestarsi in modo anomalo su un'eccezione di runtime come fanno le lingue meno potenti.

VB.NET ti offre una flessibilità ancora maggiore, consentendoti persino di eseguire calcoli. Controllalo:

 Dim a, b, c Come doppio

 a = 1: b = 0

 c = a / b

 c = c + 1

 'Infinity plus 1 è

 'ancora infinito 

Per rimanere matematicamente corretto, VB.NET ti dà la risposta NaN (Not a Number) per alcuni calcoli come 0/0.

 Dim a, b, c Come doppio

 a = 0: b = 0

 c = a / b

 Console.WriteLine (_

 "La risposta è: " _

 e c)

 'Visualizza:

 'La risposta è: NaN 

VB.NET può anche dire la differenza tra infinito positivo e infinito negativo:

 Dim a1, a2, b, c Come doppio

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

 Se (a1 / b)> (a2 / b) Quindi _

 Console.WriteLine (_

 "L'infinito postivo è" _

 & vbCrLf & _

 "più grande di" _

 & vbCrLf & _

 "infinito negativo") 

Oltre a PositiveInfinity e NegativeInfinity, VB.NET fornisce anche Epsilon, il valore doppio positivo più piccolo maggiore di zero.

Tenere presente che tutte queste nuove funzionalità di VB.NET sono disponibili solo con tipi di dati a virgola mobile (doppio o singolo). E questa flessibilità può generare confusione Try-Catch-Infine (gestione degli errori strutturati). Ad esempio, il codice .NET sopra riportato viene eseguito senza generare alcun tipo di eccezione, pertanto la codifica all'interno di un blocco Try-Catch-Infine non aiuta. Per testare una divisione per zero, dovresti codificare un test come: