realbasic-nug.it
[Top] [All Lists]

Re: Calcoli

To: REALbasic NUG Italian <realbasic-nug dot it at lists dot realsoftware dot com>
Subject: Re: Calcoli
From: Gilberto De Faveri <gilberto dot defaveri at omnidea dot it>
Date: Mon, 23 Jul 2007 14:13:13 +0200
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot it at lists dot realsoftware dot com
References: <D20A1020-AB60-460D-8602-FC8CDA0CC3EB at tiscali dot it> <315C50DB-C298-46EB-82A0-04A12BCE7848 at omnidea dot it> <EFB7FCDF-37ED-45C9-8E5F-AD397E1C3976 at yahoo dot it>
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




<Prev in Thread] Current Thread [Next in Thread>