SA0020: Possibile assegnazione del valore troncato alla variabile REAL
Rileva le operazioni su variabili intere che possono implicare un valore troncato di una variabile di tipo di dati REAL
è assegnato.
Motivo: l'analisi del codice statico fornisce un errore se il risultato di un calcolo di numeri interi è a REAL
- o LREAL
-Le variabili sono assegnate. Il programmatore dovrebbe essere informato di una possibile interpretazione errata di tale assegnazione:lrealvar := dintvar1 * dintvar2
.
Perché l'intervallo di valori di LREAL
è maggiore di quella di DINT
, si potrebbe presumere che il risultato del calcolo possa essere sempre rappresentato in LREAL
. Ma non è così. Il processore calcola il risultato della moltiplicazione come numero intero e quindi esegue il cast del risultato LREAL
. Un overflow nel calcolo dell'intero andrebbe perso. Per aggirare il problema, il calcolo deve essere eseguito come a REAL
operazione: lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
.
Importanza: Alta
PROGRAM PLC_PRG VAR rX : LREAL; dI : DINT; END_VAR
rX := dI * dI // SA0020 rX := TO_LREAL(dI) * TO_LREAL(dI) //no message
Uscita in Messaggi vista:
SA0020: Eventuale assegnazione di valore troncato a variabile REAL