Il giorno 20/lug/07, alle ore 17:16, Giovanni Gualeni ha scritto:
Il giorno 20/lug/07, alle ore 16:03, Gilberto De Faveri ha scritto:
Non conosco i dettagli implementativi dell'operatore di divisione
intera "\", ma il risultato è -841 perchè evidentemente viene
effettuato un cast ad Integer degli operandi prima di effettuare
la divisione, e nel tuo caso il risultato di (b-a) non è
rappresentabile in 32 bit.
Puoi ottenere il risultato desiderato semplicemente utilizzando il
normale operatore di divisione "/":
Dim a,b,L As Double
Dim Ln As Integer
a=222837
b=3267784437
L=2551443
Ln=(b-a)/L
In questo modo non vengono effettuati downcast durante il calcolo
ma solo durante l'assegnamento di (b-a)/L a Ln che è un Integer.
On Jul 20, 2007, at 14:17 , Giovanni Gualeni wrote:
Ciao
mi e' capitato per caso:
Dim a,b,L As Double
Dim Ln As Integer
a=222837
b=3267784437
L=2551443
Ln=(b-a)\L
il risultato (usando il diviso intero \) dovrebbe essere 1280.
Pero' esce 841! Perche'?
Giovanni
Forse c'e' davvero un bug perche' se dimensiono anche Ln come Double,
il calcolo viene cmq errato ed e' strano che questa funzione converta
in integer gli operandi quando, da manuale dovrebbe fare solo una
divisione con risultato intero (in pratica equivale alla funzione
Floor() ).
Giovanni
|