Newsgroup: it.comp.programmare
Titolo: Calcoli "assurdi"

In VB5, come faccio ad eseguire calcoli "assurdi", come ad esempio operazioni
tra numeri di duemila cifre? La calcolatrice di Windows ci riesce benissimo,
sembra che l'unico limite sia la potenza del processore e le sue capacità di
calcolo in virgola mobile

 
Questo penso che influisca solo sul tempo di calcolo
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

 wrote in message
jc717skuqpqusi1fh...@4ax.com...


 (309 cifre - limite interno delle runtime)
Questo sembra essere il limite della _mia_ "Calcolatrice di win"


 wrote in message
gcq37so8456nvnr26...@4ax.com...


(5736 cifre...)
2000! = EXP(SUM(i,1,2000,LN(i)))
// Calcolo di 2000 fattoriale
double man, pexp=0;
for (i=2; i <= 2000; i++)
	pexp += log10(i);
man = alog(pexp - floor(pexp));
Facendo il conto in base E, la somma dei primi 2000 logaritmi naturali
da' 13206.5243508, che diviso per il logaritmo di e in base 10 mi da',
appunto, 5735.52065067.
Quindi la risposta e' 10^(0.52065067)E+5735
e infatti 10^(0.52065067) = 3.31627601585...
Leonardo
P.S. Facendo due conti sulla precisione, non mi fiderei molto di n! se
     n >> 10000, ma de gustibus... :-)
".signature": bad command or file name

 wrote in message
b6187so70j8g6m13n...@4ax.com...


tu abbia usato nel tuo esempio
Ho usato una specie di C. Ma si puo' fare anche in Visual Basic. In pratica
per il fattoriale tu non fai il fattoriale, ma lo converti con la formula:
"Il fattoriale di un numero e' l'esponenziale della somma dei logaritmi dei
numeri da 2 fino a quel numero".
Oppure:
"Il fattoriale di un numero e' dieci, elevato alla somma dei logaritmi base
dieci da due fino a quel numero".
Naturalmente, tu non puoi applicare ESATTAMENTE questa formula, perche', se
sommi i logaritmi in base dieci dei primi duemila numeri naturali, ti trovi
con un numerozzo come 5735.52065067. E il Visual Basic non ti calcola certo
dieci elevato alla 5735.52065067.
Pero' puoi usare un trucco: calcoli dieci elevato alla 0.52065067, e quello
lo consideri mantissa; l'esponente e' 5735. Quindi non fai altro che dire:
"Il fattoriale di un numero N e', chiamata S la somma dei logaritmi in base
dieci dei numeri da 2 a N, 10 elevato alla *parte frazionale* di S, seguito
dalla scritta E+ e dalla parte intera di S".
In questo modo il numero piu' grande che hai maneggiato e' 5736, e il VB lo
gestisce benissimo 8-)
In modo analogo puoi lavorare con divisioni e moltiplicazioni, passando dai
logaritmi (e' anche per quello che li hanno inventati, dopotutto).
Leonardo



Il limite di 309 cifre che riporti e' il limite delle variabili reali
(double o float in C, non ricordo a cosa corrispondono in VB).
Se voui andare oltre ti devi inventare un tipo di dati ad hoc magari
tramite un array "dinamico" (che cambi dimensione se necessario)
memorizzando le singole cifre in posizioni distinte del vettore.
Ad esempio potresti definire un vettore con indici da 0 a 5800 e
memorizzare in v[0] la cifra meno significativa del numero e in
v[5800] la potenza 10^5800. Ovviamente devi ridefinire le operazioni
fondamentali di somma, sottrazione, moltiplicazione, ecc... . Inoltre
devi risolvere il problema del numero variabile di cifre (per numeri
interi anche molto grandi non e' un problema, ma per numeri decimali
periodici o irrazionali... beh, in bocca al lupo!!!)
gianax
Possano i vostri pedoni divenire passati

 wrote in message
9v3g7s0b57ka8nimr...@4ax.com...


 wrote in message
G78e4.16526$I3.1...@news.infostrada.it...
: Ci ho pensato un po' e ho capito il ragionamento... il problema ora è:
:
: Visual Basic NON ha la sommatoria
???
: Quindi per avere la somma dei logaritmi devo fare "a mano". In pratica
dovrei
: mettere in loop la funzione che calcola i logaritmi naturali dei numeri
da 2 a
: n, con il rischio di INCHIODARE il programma (mi è già successo...).
Ti assicuro che , a meno di una formula risolutiva, le sommatorie si fanno
in ciclo. e per i logaritmi , la somma dei logaritmi dei primi n numeri e'
log(n!), quindi...
--
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/
      -- the one and only --     e-mail : 
blak...@tiscalinet.it
                                ICQ    : 59394345
The UNIX Guru's View of Sex:
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

La sommatoria è quell'operazione che dice: "Somma di tutti i logaritmi naturali
di n per n intero uguale a 2 tendente a 2000"
In pratica, il For...Next di VB...


 wrote in message
3874a7c0...@news.libero.it...


In pratica, il For...Next di VB...
Esatto. Alle brutte, ti esce dal ciclo for/next con un errore, ma
ne dubito. Inchiodare, non dovrebbe inchiodarsi mai.
Uso il condizionale perche' so che e' un prodotto Microsoft ;-)


 wrote in message
R4hg4.15583$D3.9...@news.infostrada.it...
