Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 Istruzione Mod

Ho un numero di 40 caratteri e devo trovare il resto.
Se uso la funzione Mod il programma mi da' un errore di overflow.
Qualcuno sa' come posso fare?
Grazie 

 Ho un numero di 40 caratteri e devo trovare il resto.
Il divisore è costante o variabile?
Marco F.

 ha scritto nel messaggio 
news:7C_Ti.151353$%k.29...@twister2.libero.it...

e' costante.
devo dividere un numero intero di 40 caratteri per 97 e ottenere il resto.

 Se uso la funzione Mod il programma mi da' un errore di overflow.
Un numero di 40 caratteri chevvordě?
il numero č intero?
č una divisione tra interi?
maggiori info, grazie.
ciao
stefano

 devo dividere un numero intero di 40 caratteri per 97 e ottenere il resto.
E certo che ti da' overflow
:-)
un long occupa 4byte e va da -2.147.483.648 a 2.147.483.647
ciao
stefano

 Ho un numero di 40 caratteri e devo trovare il resto.
Se per '40 caratteri' intendi che la rappresentazione decimale richiede 
40 cifre, mi sa che l'unica strada sia usare il virgola mobile (che 
appunto può rappresentare l'inifinito e l'infinitesimo).
Prova a convertire a Double numeratore, denominatore e anche la 
variabile di destinazione, non si sa mai.
Ciao
Alberto
-- 
Georges Pompidou: Un uomo di stato è un politico che dona se stesso al 
servizio della nazione. Un politico è un uomo di stato che pone la 
nazione al suo servizio.

 ha scritto nel messaggio 
news:ffpt9r$8f8$2...@balena.cs.interbusiness.it...

Es.
ho questo numero
1234567890123456789012345678901234567890
Totale cifre 40 (il numero e' sempre intero e cambia di volta in volta. 
Comunque puo' raggiungere max cifre = 40).
Lo devo dividere per 97 e trovare il resto.
Mi interessa sapere il resto della divisione.

 Mi interessa sapere il resto della divisione.
Forse ti conviene cercare una libreria che permette la manipolazione di 
interi a grandezza arbitraria, perché non ci sono variabili che possono 
contenere un intero così grande.
Per VB6 non ti so aiutare in concreto, ma prova a cercare in questa 
direzione.
PS
Il resto della tua divisione è 28 :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 Il resto della tua divisione è 28 :-)
Ho provato a calcolare il resto di questo numero 
12345678901234567890123456789012
E' il massimo che sono riuscito a inserire nella calcolatrice di windows. la 
calcolatrice calcola 71.
Il mio programma 32.
Per avere un altro termine di confronto , hai la possibilita di calcolare il 
resto di quel numero?
Grazie. 


ho provato come hai detto tu.
Non da errore ma sono perplesso. Per i numeri piccoli sembra funzionare.
Appena supero le 30 cifre mi da un risultato diverso da quello calcolato con 
la calcolatrice di windows.

 resto di quel numero?
71


 Non da errore ma sono perplesso. Per i numeri piccoli sembra funzionare.
Non può funzionare, sicuramente hai un overflow. Mi pare strano che non 
ti dia nessun errore, ma non conosco VB6, quindi non ho idea di come si 
comporta.


 comporta.
Si e' vero. Ho omesso che la prova lo fatta su VbNet. Scusa.
Quello che segue e' il codice usato:
Dim Num As Double = 0
Dim Den As Double = 0
Dim Ris As Double = 0
Num = CDbl(TextBox1.Text)
Den = CDbl(97)
Ris = Num Mod Den
MsgBox(Ris)

 MsgBox(Ris)
Perché la funzione CDbl ti converte il numero approssimandolo in 
notazione scientifica. Se fai MessageBox.Show(Num.ToString()) ti rendi 
conto di quello che succede.
Io avevo capito che usavi VB6. Se ti interessa per 
VB.NET
 io ho trovato 
una libreria che fa al caso tuo.


 una libreria che fa al caso tuo.
Avevi capito bene. Avevo iniziato a usare VB6 poi ho deciso di usare vbnet. 
ma intanto il post era gia avviato.
Mi farebbe molto comoda la libreria che hai.
Io avevo pensato a questo. Ma funziona solo per piccoli numeri appena supero 
le 30 cifre mi da risultati sbabliati.
Dim Num As Double = 0   'Numeratore
Dim Den As Double = 0  'Denominatore
Num = CDbl(TextBox1.Text)
Den = CDbl(97)
Do While Num > 97
       Do While Den * 2 < Num         'con questo ciclo mi avvicino a NUM 
finche il doppio di Den non lo supera
             Den = Den * 2
      Loop
      Num -= Den                               'Qui sottraggo a Num il 
valore di Den.      e riparto fino a che non ottengo un numero < 97
     Den = 97
Loop
MsgBox(Num)                  ' Num dovrebbe essere il resto, ma non è cosi

 Mi farebbe molto comoda la libreria che hai.
Allora, è questa, ma è una classe in C#:
http://www.codeproject.com/csharp/biginteger.asp
Io l'ho compilata come dll, in modo da poterla usare agevolmente anche 
con 
VB.NET
. E' compilata per .NET 2.0.
L'ho caricata qui:
http://www.mediafire.com/?7t3zf9hjqyj
Devi aggiungere il riferimento alla libreria, e poi creare un oggetto 
BigInteger passandogli i numeri che vuoi usare al costruttore come 
stringa. A questo punto puoi usare i normali operatori, perché sono in 
overload.
Una cosa del genere:
Dim Num As New BigInteger("1234567890123456789012345678901234567890", 
10) '10 è la base del numero
Dim Ris As Integer = (Num Mod 97).IntValue 'il metodo IntValue ritorna 
un intero


Grazie infinitamente. Sei stato di grande aiuto.
Spero di ricambiare.

Raffaele ha scritto:

Qualche mese fa è stata fatta una domanda analoga, leggiti questo
mio post, c'è anche il codice (non è ottimizzato, ma funziona).
http://groups.google.it/group/it.comp.lang.visual-basic/msg/b9665c35e04f4ca8
Ciao.
Mauro