Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: DragoRosso - Ottobre 01, 2023, 10:29:35 pm

Titolo: Numeri a virgola mobile - Maschera eccezioni
Inserito da: DragoRosso - Ottobre 01, 2023, 10:29:35 pm
Ciao a tutti.

Sono a chiedervi se usate nelle vostre applicazioni le notazioni "floating point pure" ossia con i NAN, -INF, +INF

In pratica, mascherate le eccezioni matematiche ? Usate cosė:

Codice: [Seleziona]
var a: double = -5;
var b: double = 0;

ShowMessage((a/b).ToString);    //<------- visualizza "-INF"

ShowMessage(sqrt(a).ToString);  //<------- visualizza "NAN"

oppure usate le classiche eccezioni con try / except ?

Per usare il formato completo senza eccezioni si deve usare qualcosa come :

Codice: [Seleziona]
  SetExceptionMask(GetExceptionMask + [exDenormalized, exOverflow, exZeroDivide, exInvalidOp]);

Le variabili double assumono valori "particolari" nella loro configurazione (segno, mantissa, esponente,) quando i valori non possono essere rappresentati come numero standard, qui potete vedere le specifiche: https://www.oreilly.com/library/view/delphi-in-a/1565926595/re72.html (https://www.oreilly.com/library/view/delphi-in-a/1565926595/re72.html)

Finora nelle applicazioni che ho sviluppato le eccezioni erano sempre gestite (ossia -5 / 0 = Errore) e usavo la "mascheratura" solo per le chiamate a DLL, in particolare quelle sviluppate in C.
Non ho quindi esperienza sulla esecuzione con NAN, INF, etc ...

Le operazioni vengono completamente eseguite sempre ? O avete esperienza di problemi ?

Ovvio che nel momento si debbano verificare le variabili si possono usare funzioni come IsNAN(...).

Riportate le vs. esperienze.

Ciao ciao.