Newsgroup: it.comp.appl.access
Titolo: Numero infinitamente grande, impossibile?

Buon anno a tutti,
vorrei sottoporre alla vostra attenzione una necessità che mi si è 
presentata in questi giorni e che non sono ancora riuscito a soddisfare. 
Il quesito è tanto semplice quanto irrisolvibile, e consiste nel gestire 
il numero che scaturisce da un semplice ciclo come questo in modo da 
evitare l'overflow e proseguire con la moltiplica.
Tenete presente che poi, sul risultato dovrei effettuare dei calcoli e 
quindi non posso scomporre il numero (troppo facile) :-(
Voi come fareste?
Option explicit
Dim x As Double
dim y as Long
x=1
for y = 1 to 9999   'qui dovrei ESAGERARE es:999999999999
     x=x*2
     debug.print y,x
next y
AIUTOOOOOOOOOO :-)
-- 
Claudio(BS)
L'unico problema per l'uomo non sta nella difficoltà delle sue imprese
ne' nella quantità di denaro necessario per compierle, ma nella durata
della sua esistenza. (Claudio 14.02.2004)
NB. Protezione antispam
Per rispondere aggiungere claudio

 AIUTOOOOOOOOOO :-)
Il Double è il formato più esteso a mio avviso.
Il fatto di non poterlo scomporre direi che non è vero, anzi
è semplice matematica, usando 2 registri a 32Bit si ottiene un
registro a 64....!!!
Prova ad usare la tecnica delle API il LOWORD e HIWORD.
Quindi per le operazioni fai come matematica insegna...!
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
usando un campo memo e volendo esagerare usando un campo ole ;<)
cmq la risposta e' semplice
--
a.cara

 Claudio(BS) wrote:
[cut]
P.S. sempre che, volendo esagerare, tu sia disposto a aspettare fino a 
veder l'erba crescere dalle radici. Sempre ;<)
--
a.cara

 @Alex
Grazie per la dritta delle API, ora cerco info.


 usando un campo memo e volendo esagerare usando un campo ole ;<)
Utilizzando il tipo di campi che suggerisci mi troverei poi con la 
necessità di convertirli in un dato di tipo numerico per effettuare le 
operazioni e sarei quindi con lo stesso problema ma con un passaggio in 
più :-(
La situazione è più legata al vba che non al database, lì sicuramente un 
campo memo potrebbe andare ma il problema è ricavare il dato da inserire 
nel campo memo ;-)


 
finita la celia,compresa l'erba dalle radici, che voleva significare il 
tempo necessario per fare i calcoli.
In base alla tua richiesta, per quello che ho capito, il "numero" 
restituito dovrebbe essere piu' grande del limite consentito da un 
double, quindi *non* si possono utilizzare i tipi numerici previsti da 
access. Tutto cio' non e' solo un limite di access (vba)  ma di un 
qualsiasi linguaggio che al momento limita cmq alla grandezza di un 
double dovuta, credo, ai limiti della ALU del processore
Ti devi inventare, percio', una strategia alternativa che consenta di 
"sfondare" il muro deglio 8 bytes da qui la mia citazione, imprecisa, 
dei memo e/o degli ole che indicavo solo per rendere conto della 
lunghezza che poteva assumere il risultato (questo sempre in base a 
quello che avevo desunto dalla tua richiesta).
In finale. Che succede se prendo due stringhe e a partire da dx sommo 
due byte corrispondenti su una stringa di due caratteri e memorizzo il 
byte di dx mentre il byte di sx lo uso come riporto e procedo vs sx fino 
a posizione 1. Tale ciclo lo ripeto per tutte le volte che voglio 
(diciamo un double di volte).
  Questo ciclo credo che abbia una durata biblica.
--
a.cara

 [CUT]
Ti passo solo un'idea per la cosa, che dovrai adattare:
Public Function HIWORD(ByVal dwValue As Long) As Long
    Call CopyMemory(HIWORD, ByVal VarPtr(dwValue) + 2, 2)
End Function
 
Public Function LOWORD(ByVal dwValue As Long) As Long
    Call CopyMemory(LOWORD, dwValue, 2)
End Function
Public Function MAKELONG(ByVal wLow As Long, ByVal wHi As Long) As Long
    If (wHi And &H8000&) Then
        MAKELONG = (((wHi And &H7FFF&) * 65536) Or (wLow And &HFFFF&))
Or &H80000000
    Else
        MAKELONG = LOWORD(wLow) Or (&H10000 * LOWORD(wHi))
    End If
End Function
Ciao


 
Grazie infinite per la dritta, ora mi lurko :-) quanto stai suggerendo e 
vediamo se riesco a superare anche questo ostacolo. Non garantisco di 
farmi risentire nel breve termine ma appena ho risolto mi farò vivo.
nuovamente grazie
byEz


 a.cara
