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: Giovanni Gualeni <ggualeni at tiscali dot it>
Date: Fri, 20 Jul 2007 17:44:37 +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> <56831166-7FC3-434A-82D9-AB80A3DE28EA at tiscali dot it>

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

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