Newsgroup: it.comp.lang.visual-basic
Titolo: errore run-time '6' overflow

Avrei necessita di calcolare il resto di una divisione tra due numeri es. 
150200201006123456789103512182900 e 46. Indipendentemente da come dichiaro 
le variabili visual basic 6 utilizzando la funzione MOD mi ritorna l'errore 
in oggetto.
Se invece utilizzo la formula alternativa n-d*INT(n/d) il risulato č zero. 
La lunghezza (in cifre) del divisore da utilizzare nel mio programma piů o 
meno č pari a quella che ho indicato come esempio. Commetto un errore di 
dichiarazione delle variabili oppure č un limite di visual basic?
Grazie mille!! 

 esempio. Commetto un errore di dichiarazione delle variabili oppure è un limite di visual basic?
Hai provato con Decimal ? Non so sul VB6, ma nel VB5 l'avevano
appena aggiunto e non era ancora completamente supportato.
Per usarlo devi fare
Dim A as Variant
e poi
A= Cdec(A)
Ma, almeno col VB5, non arriva a trentatre cifre, come intero, il massimo
dovrebbe essere 28 o 29.
*********************
Private Sub Command1_Click()
Dim a As Variant, b As Variant, risult As Variant
a = CDec(a)
b = CDec(b)
risult = CDec(risult)
a = CDec("9.999.999.999.999.999.999.999.999.999")
b = 47
risult = a - (b * Fix(a / b))
Debug.Print risult
End Sub
*********************
Altrimenti ti tocca cercare qualche libreria esterna che supporti calcoli
matematici di quel genere. Mi pare si definiscano "a precisione arbitraria".
Se non erro qualcuno qui ci aveva già combattuto, ma non ricordo chi.
Albe V°, Zanna, Languasco... ?
Comunque un'occhiata al volo su PSC trova questa, vedi se ti va:
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=68710&lngWId=1
Bye, G. 

 due numeri es. 150200201006123456789103512182900 e 46.
Come ti ha già detto Paperino, un intero a 33 cifre è eccessivo
per le possibilità di memorizzazione di VB6 (e non solo del 6).
L'unica "imprecisione" di Paperino è che ha scritto "intero" ma
non ha specificato quale: la Mod usa i Long, per cui hai 9 cifre
di precisione (dieci se la prima è uno o due, fino a 2 miliardi).
Il primo problema è che il "numerone" devi inserirlo in memoria,
e certamente non puoi usare una variabile numerica (non esistono
variabili con 33 cifre di precisione) per cui devi memorizzarlo
in una stringa. A quel punto puoi estrarre le cifre ad una ad
una per evitare la limitazione della precisione, e calcolare il
resto "per passi successivi", cifra per cifra. Ad esempio:
Function MioMod(arg1 As String, arg2 As Long) as Long
    Dim c As String, i As Integer, n As Long
    n = 0
    For i = 1 To Len(arg1)
        c = Mid(arg1, i, 1)
        n = (10 * n + Val(c)) Mod arg2
    Next
    MioMod = n
End Function
Ovviamente si può migliorare estraendo le cifre a blocchi (sempre
ricordandosi che si deve sempre avere a che fare con numeri che
non "debordino" dai limiti del Long), ma lo lascio a te...
Per inciso... nell'esempio che hai fatto, la risposta è 12.
Ciao.
Mauro 

 Se non erro qualcuno qui ci aveva già combattuto, ma non ricordo chi.
Per .NET su Code Project c'è una libreria molto semplice da utilizare, 
che consente di manipolare interi grandi a piacere:
http://www.codeproject.com/csharp/biginteger.asp
Esempio:
Dim dividendo As New BigInteger("150200201006123456789103512182900", 10)
Dim divisore As New BigInteger("46", 10)
Dim resto As Integer
resto = (dividendo Mod divisore).IntValue
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 utilizzare, che consente di manipolare interi grandi a piacere
Sě, ma si parlava di VB6...
Ciao.
Mauro 


... Eh, è bello sapere bene la matematica....
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/