Newsgroup: it.comp.programmare.win32
Titolo: strano overflow in VB

allora
se io faccio
dim a as variant
a=2^94
tutto ok
mentre se la dichiaro come currency dà overflow. (gia questo è strano)...
ora, se io ho la variabile variant, e faccio
debug.print a mod (256^3)
da un errore di overflow, e cio è ancora piu strano, tenendo conto del fatto
che alla fine verrà un numero molto piu basso di 2^94...
come è possibile?
toglietemi una curiosità... queto problema degli overflow facili è solo del
Visual Basic ? chesso, se uno provasse a scrivere delle DLL in altri
linguaggi, DLL in cui mettere tutti i calcoli complicati e con numeri
grossi, questi altri linguaggi darebbero lo stesso errore di overflow (mi
riferisco, as es. al C++, oppure al Fortran) ?
grazie
MarioH

credo che, per valori cosi' alti, ci voglia il double
il variant lo prende perche' trasforma internamente nel tipo piu' adatto,
double in questo caso
lo dimostra il fatto che se dichiari la variabile come variant, e poi fai
debug.print typename(nomevariabile) salta fuori proprio il double....
morale? double!
ciao


mi da lo stesso un errore di overflow, nel momento in cui provo a fare a mod
(256^3)
ma secondo te succede anche con altri linguaggi, tipo il Fortran ?
MarioH

>ma secondo te succede anche con altri linguaggi, tipo il Fortran ?
non dipende dal linguaggio
se tu fai un'operazione che ha un risultato che supera l'ampiezza massima
del tipo di variabile, esci con un overflow
guarda che con double non dovrebbe dare nessun errore...
ma ovvio che anche lui ha il suo limite (non so quanti miliardi, ma
molti....)
ha... nel caso, puoi sempre usare un -on error- onde evitare calcoli che
diano errore... e gestire tu il caso anomalo
beh... ciao


l'errore purtroppo me lo da
questo è il codice VB
Dim a As Double, b As Double
Dim c As Double
a = 2 ^ 94
b = 256 ^ 3
c = a Mod b
Debug.Print c
l'overflow è nella riga in cui cerco di assegnare il valore a c.
quando parlavo del fortran, intendevo dire: in altri linguaggi, tipo il
fortran, esiste un tipo di variabile che contenga numeri grossi piu o meno
come 2 ^ 100, e che permetta di fare delle operazioni con questi numeri
(cosa che, evidentemente, il VB non permette) ?
grazie
MarioH

> 
M> mi da lo stesso un errore di overflow, nel momento in cui provo a fare a mod
M> (256^3)
M> ma secondo te succede anche con altri linguaggi, tipo il Fortran ?
Per il FORTRAN non ricordo con precisione, ma col C c'è la promozione
alla variabile di capacità più alta presente nell'espressione.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

 ha scritto nel messaggio
news:9otttv$fdt4g$1...@ID-70152.news.dfncis.de...




Almeno per il vecchio QuickBasic, l'operatore MOD si applica solo a tipi
interi.
Quindi a e b vengono convertiti in interi, da cui l'overflow.
Devi cercare nella guida se esiste un operatore modulo che si
applichi ai numeri floating-point.
Ciao  Manlio Perillo

 Fortran) ?
nessun errore, ma darebbero un risultato sbagliato. Esistono librerie, e 
addirittura linguaggi (come bc, linguaggio interpretato pensato 
unicamente per calcoli matematici), fatti apposta per superare questa 
limitazione

 limitazione
grazie.
cmq ho deciso. appena ho un po di tempo č ora di imparare il fortran 90... č
un "sogno" che ho da molto tempo... speriamo che non sia troppo difficile
MarioH


un attimo solo. io ho prvato nelle opzioni di compilazione, a disattivare i
controllo sugli overflow, e ho compilato il programma. ma l'errore di
overflow me lo da lo stesso...
tu di quel opzione arlavi? cosa č il bound checking degli interi ?
grazie
MarioH

: 

"overflow degli interi" o qualcosa di simile. Ma se usi i Variant non 
vale, funziona solo con i Byte, Integer e Long

 vale, funziona solo con i Byte, Integer e Long
ah vabbe... allora prvoo a cambiare da variant in long e vediamo che combina
::))))
MarioH