On Jul 23, 2007, at 9:07 , Massimo Valle wrote:
On 20/lug/07, at 16:03, Gilberto De Faveri wrote:
E' comunque un bug o quantomeno un comportamento non corretto
perchè RB supporta i valori interi a 64bit che possono
rappresentare le quantità esposte.
Quello che intendevo dire riguardo ai dettagli implementativi è che,
stando alla documentazione, l'operatore "\" è utilizzato "to perform
Integer division between two numbers". L'operatore accetta numeri di
qualsiasi tipo, ma effettua internamente la divisione tra variabili
intere, credo per una precisa scelta progettuale (sicuramente
opinabile, ma forse dettata dalla diversa gestione dei numeri in
virgola mobile tra le piattaforme supportate da REALbasic).
Esistono un paio di bug report a riguardo (uhfdydaz e mbqwdjnt), ma
non mi è chiaro perchè siano stati chiusi.
Di conseguenza se fa una divisione intera dovrebbe preoccuparsi di
capire se può rappresentarla a 32 o 64 bit.
E infatti dichiarando le variabili come Int64 anzichè Double (ovvero
come interi a 64 bit e non come numeri in virgola mobile a 64 bit)
l'operatore "\" si comporta correttamente:
Dim a,b,L As Int64
Dim Ln As Integer
a=222837
b=3267784437
L=2551443
Ln=(b-a)\L
Dico dovrebbe perchè RB è un framework ad alto livello che si fa
carico del compito di effettuare i cast automatici e che non
consente di forzare cast su sui tipi.
Questo è vero solo per i tipi intrinseci (per i quali, come in altri
linguaggi, è possibile l'assegnamento a tipo diverso per ottenere lo
stesso risultato).
In generale, REALbasic permette di forzare il cast sui tipi:
Dim c as Control
c = BevelButton1
PushButton(c).Push
Exception err
If err IsA IllegalCastException then
MsgBox "Trying to recast a BevelButton as PushButton!"
End if
--
gilberto de faveri
omnidea srl
edificio pegaso
parco scientifico tecnologico vega
via delle industrie, 15
30175 venezia marghera
tel +39 041 509 3441
fax +39 041 509 3641
www.omnidea.it
|