Newsgroup: it.comp.lang.visual-basic
Titolo: Trattare numeri grandi

Salve,
ho la necessità di effettuare in una applicazione in VB6 delle operazioni
di modulo (resto della divisione) tra un numero piuttosto grande (circa 24
cifre, intero) e un intero di due cifre. E' possibile? Con VB ottengo
soltanto degli overflows mentre la calcolatrice di windows xp sembra
gestire calcoli di questa entità.
Grazie.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 gestire calcoli di questa entità.
http://www.mazzaro.net/diego/
, cerca "numeri giganti" nelle funzioni
matematiche, vedi se ti aiuta.
Bye, G.

 > gestire calcoli di questa entità.
Pork, quasi dimenticavo... leggiti questo thread:
http://www.google.com/groups?threadm=ca9kpa%24kv8%241%40news.newsland.it
Bye, G.

 matematiche, vedi se ti aiuta.
Ciao e grazie per le risposte,
per quel che ho velocemente potuto vedere sia il primo che il secondo
codice gestisce le varie operazioni fondamentali ma non direttamente il
resto della divisione. E' possibile modificare, ad esempio, le procedure
del sito che ho quotato per ricevere il solo resto?
Grazie!



Dunque, il tipo di dati Decimal gestisce numeri fino a 29 cifre in virgola
mobile. Non si dichiara "As Decimal" perché è un tipo particolare di dati
Variant. Va creata una variabile Variant, e convertita con CDec. Il problema
è che la funzione Mod non gestisce questo tipo di dati perché converte
internamente ogni dato in Long, troncando la parte decimale. Ma questo si
può aggirare.
Il codice seguente funziona senza errori:
    Dim a As Variant
    Dim b As Variant
    a = CDec("1000000000000000000000010")
    b = CDec(a / 25)
    b = a - Int(b) * 25 ' emula la funzione Mod
    Debug.Print a
    Debug.Print b
Spero ti possa aiutare.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Variant. Va creata una variabile Variant, e convertita con CDec. Il problema
cazzo, se morivo ieri, avrei completamente ignorato che VB 
supportasse (anche se in maniera un po' pedestre) un tipo di 
dasi simili.
Chiedo quindi ragguagli a chi li abbia già usati, tipo :
1) quanta memoria occupa un decimal ? I 16 byte della variant 
oppure quelli più altra memoria altrove (e se questa, quanta ?)
2) che velocità di esecuzione hanno nelle operazioni in virgola 
mobile ?
3) qualcuno è mai riuscito a convertire DA/AD Decimal ed il 
formato "huge integer" ad otto byte richiesto da alcune funzioni 
API di accesso a files ed al disco (per gestire dimensioni 
superiori ai 2 GB) ?
ciao e grazie in anticipo
Soviet-MArio


 
http://www.google.com/groups?threadm=ca9kpa%24kv8%241%40news.newsland.it
eh eh :)
Io non lo userei per farci qualcosa di utile :)
Anzi adesso correggo un baco che avevo trovato e metto nel sorgente un bel
discaimer di non assunzione di responsabilitą :)
termoPilucco


 superiori ai 2 GB) ?
gli UINT se non sbaglio sono 8byte quindi il tipo di dato "corretto" è il
Currency (un altro intero scalato) per però VB ti mostra con il punto
decimale prima delle ultime 4 cifre.
In alternativa puoi usare una struttura tipo la POINTAPI o due Long, ma così
hai il dato spezzato in due :)
Per approfondimenti un paio di mesi fa Lupo aveva innescato il solito thread
sull'imprecisione dei Double e era venuta fuori l'idea dei Decimal.
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 sull'imprecisione dei Double e era venuta fuori l'idea dei Decimal.
ora cerco.
Grazie
Ciao
CCCP++Mario


 floating point ? Sono interi (con una virgola fissa) ?
Esatto.
I Currency, come i Decimal sono interi scalati.
I Currency sono a virgola fissa (4 decimali) i Decimal sono comunque a
virgola mobile (conta solo il numero di cifre totali)


 virgola mobile (conta solo il numero di cifre totali)
beh, se sono a virgola mobile e non hanno posizione fissa, i 
decimal hanno anche una "precisione" flessibile (come errore 
assoluto), quindi io li vedo come floating point a tutti gli 
effetti.
Semmai sono di uso meno generale dei numeri rappresentati a 
mantissa + esponente (tipo double o long double, che mirano ad 
estendere il range massimo più che non la sola precisione pura). 
I decimal, avendo solo mantissa (più, ovvio, i bit della 
posizione della virgola, cmq meno dei bit necessari a 
rappresentare un esponente vero e proprio e non solo una potenza 
di dieci <= al numero di cifre della mantissa), sembrano 
orientati poco all'estensione del range massimo, e molto alla 
pura precisione di calcolo. Cmq date le dimensioni hanno 
ugualmente un buon range e non dev'essere facile mandarli in 
overflow con applicazioni che non siano scientifiche o 
"combinatorie" ! Per l'underflow non ne parliamo nemmeno.
P.S. da che fonte hai preso la struttura delle VARIANT ? E' un 
header standard .H di qualche compilatore ?
ciao
CCCP++Mario


 P.S. da che fonte hai preso la struttura delle VARIANT ?
Che domande: da MSDN!
Ciao