incus Inserito: 5 luglio 2018 Segnala Inserito: 5 luglio 2018 Salve a tutti, in un progetto TiaPortal mi sono accorto che se a una variabile reale ci addiziono un valore di 0.25 di volta in volta (vedi allegato), quando il valore reale raggiunge 4194304.0, l'operazione si arresta. Se cambio l'addendo in un valore maggiore di 0.25, l'operazione riprende a contare. Non sto cercando un modo alternativo per risolvere il problema, vorrei capire il perchè si comporta in questo modo. Qualcuno ne sa qualcosa? P.S. lo stesso comportamento lo ha anche il simulatore, per maggior precisione uso il TIAPortal V14sp1 e una CPU S71214C V4.2. Buona giornata
84paolo Inserita: 5 luglio 2018 Segnala Inserita: 5 luglio 2018 Ciao. Questo comportamento è abbastanza normale. Il formato real è un numero rappresentato in formato esponenziale, non in binario come i numeri interi, quindi più il numero diventa grande e più le parti piccole vengono ignorate proprio per via del formato di rappresentazione. Se devi mantenere un conteggio così devi usare un altro real che per esempio incrementi di 1 ogni volta che il tuo conteggio supera il milione e poi sottrai questo numero dal conteggio attuale. Purtroppo per come è rappresentato il formato real non puoi sommare o sottrarre un numero molto piccolo se il tuo numero è enorme
incus Inserita: 5 luglio 2018 Autore Segnala Inserita: 5 luglio 2018 28 minuti fa, 84paolo scrisse: Ciao. Questo comportamento è abbastanza normale. Il formato real è un numero rappresentato in formato esponenziale, non in binario come i numeri interi, quindi più il numero diventa grande e più le parti piccole vengono ignorate proprio per via del formato di rappresentazione. Se devi mantenere un conteggio così devi usare un altro real che per esempio incrementi di 1 ogni volta che il tuo conteggio supera il milione e poi sottrai questo numero dal conteggio attuale. Purtroppo per come è rappresentato il formato real non puoi sommare o sottrarre un numero molto piccolo se il tuo numero è enorme Grazie per la tempestività
batta Inserita: 5 luglio 2018 Segnala Inserita: 5 luglio 2018 Puoi usare una variabile LReal (64 bit).
incus Inserita: 5 luglio 2018 Autore Segnala Inserita: 5 luglio 2018 Ho trovato, proprio in questo forum, un documento che spiega nel dettaglio il perché di questo comportamento, questo è il link. Riassumendo, questo "errore" di calcolo è dovuto al fatto che Real ha una precisione fino alla sesta cifra decimale, LReal fino alla quindicesima, quindi 10^y, dove y > 6 (Real) o 15 (LReal). Ad esempio (Real): 100 000 000 + 1 = 100 000000 Correggetemi se sbaglio....
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora