Newsgroup: it.comp.lang.delphi
Titolo: Invalid floating point operation...

Ciao a tutti, ho fatto un programma che legge dei dati da tabelle firebird 
ed effettua numerosi calcoli statistici; premetto che non uso funzioni 
matematiche particolari, ma al massimo solo moltiplicazioni e divisioni.
Sul mio pc (AMD64) tutto ok.
Su un altro pc (AMD Sempron) tutto ok.
Se eseguo il mio applicativo su un terzo pc con doppio processore intel 
pentium xeon dopo qualche minuto mi esce dal programma con l'errore indicato 
in oggetto.
Non avendo la possibilità di andare in debug sul terzo pc non so cosa possa 
essere... avete qualche idea???
Ciao. 

 essere... avete qualche idea???
E' possibile che uno o più campi coinvolti nei calcoli che esegui 
sia...nullo? :-|
-- 
MARCO «Alka» BREVEGLIERI
   (
http://www.marco.breveglieri.name
)
Leggi le FAQ di ICLD: 
http://icld.altervista.org

 essere... avete qualche idea???
1) potresti loggare i calcoli che fai e le variabili in gioco.
2) se non stai usando i currency, ti consiglio di farlo: una divisione per
zero con double, puo' essere evitata usando i currency (a me e' successo
proprio questo, i numeri erano piccolissimi e la precisione dei double
causava un 0/0).
Questo e' quanto mi viene in mente, appena scopri cos'e' faccelo sapere ;)
Ciao!
-- 
Morde. 
FAQ di icld (beta-version): 
http://icld.altervista.org
 
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 Ciao!
Spero.... :P


 errore su entrambi i pc o sbaglio?
Non necessariamente.  Può contare anche l'architettura particolare di un
processore e la precisione utilizzata per i calcoli.  Insomma, ci possono
essere di mezzo tante cose.  E comunque una divisione per zero dovrebbe
sollevare un EDivByZero.  Prova a controllare i campi di EExternal per
vedere di scovare qualche informazione in più.  Loggare i calcoli,
comunque, è la via migliore, specie se sono davvero tanti.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 operazioni sono veramente tante) pero' posso provare...
Puoi mettere tutto il codice in un unico /try ... except/, oppure 
suddividerlo in blocchi logici.
In caso di eccezione, richiami una routine del tutto identica al blocco 
"a rischio", che riceve come parametri tutte le variabili in gioco per 
quella porzione di algoritmo e che, oltre ad rieseguire tutte le stesse 
operazioni effettui anche il log su file dei dati e dei passaggi.
In questo modo eviti di loggare anche le operazioni che vanno a buon 
fine, ma solo quelle effettivamente necessarie.
Un'altra buona soluzione potrebbe essere quella di prepararti di volta 
in volta una stringlist di log che, in caso di errore verrà serializzata 
su un file, altrimenti svuotata al termine dell'operazione eseguita 
correttamente.
Ciao,
Ganluca.

Ottimi consigli!
Grazie 1000, li mettero' in pratica poi vi sapro' dire! 

Grazie 1000, li mettero' in pratica poi vi sapro' dire!
Verifica che le impostazioni internazionali di Windows abbiano lo stesso 
formato i punteggiatura per indicare la VIRGOLA italiana...
ad esempio il tuo progamma si aspetta una VIRGOLA per separare UNITA' da 
sottomultipli (tipico esempio di OS in Italiano-Default) mentre nel terzo 
PC Windows si aspetta un PUNTO (tipico settaggio di OS in Inglese-
Default) ovvio che ti restituisce un errore di FLOATING....il PUNTO in 
italia sta per le migliaia, mentre la virgola in inglese sta per le 
migliaia...
--- posted by geoForum on 
http://www.delphiedintorni.it