Newsgroup: it.comp.lang.delphi
Titolo: operazioni aritmetiche con numeri a 200 cifre

Salve ragazzi,
Ho la necessita' di creare una calcolatrice che effettuti le
operazioni di base (somma, sottrazione, divisione e moltiplicazione)
con "numeri" (in realta' array di interi) con 200 o piu' cifre.
Fin'ora ho realizzato (non senza difficolta') la somma, la sottrazione
e la moltiplicazione ma mi sono arenato sulla divisione.
Qualcuno di voi sa darmi una dritta su come fare ? 
Anche sulle altre operazioni che ho già risolto.
Grazie
Massimo

> Qualcuno di voi sa darmi una dritta su come fare ?
anche il divisore puo' essere di fino a 200 cifre? o solo il dividendo? se
fosse solo il dividendo, puoi usare tranquillamente il metodo imparato alle
elementari per dividere due numeri; se invece anche il divisore fosse oltre
il range normale degli interi, allora ti posso suggerire di scomporre il
numero in fattori primi e svolgere le divisioni elementari.. sempre che
naturalmente il numerone al divisore non sia un numero primo a sua volta
eheh

 ha scritto nel messaggio
news:c666er$8es70$1...@ID-43509.news.uni-berlin.de...

Io qualche anno fa ho realizzato una libreria a scopo RSA che funziona
egregiamente. E' solo una prima implementazione, se hai voglia di
ottimizzarla...
Le 200 cifre in che base sono da intendersi? Hai anche la necessita' di
stampare il risultato? Magari in base 10?
Scomporre il numero in fattori primi non mi sembra una gran trovata ;-)
E' molto piu' semplice e veloce la divisione "algoritmo classico"
Ciao
 Max

 ha scritto nel messaggio
news:5913b656.0404...@posting.google.com...

Moltiplicare per l'inverso?

 Moltiplicare per l'inverso?
Credo lavori solo con interi.
Ciao
 Max

> Moltiplicare per l'inverso?
per ottenere l'inverso devi comunque fare una divisione, no? ;)

> Credo lavori solo con interi.
sommi il divisore tante volte finche' il totale delle somme non e' uguale o
maggiore del dividendo; a quel punto conti il numero delle somme -1, e
quello sara' il quoziente; e con una semplice differenza otterrai il resto.

Allora mi spiego meglio:
tutti e due i numeri sono da 200 (o piu') cifre, la base e' 10;
praticamente e' la stessa calcolatrice che ha anche winzzoz con la
differenza che gestisce molte piu' cifre, se qualcuno ha qualche
suggerimento gradirei anche un esempio, alcuni mi hanno suggerito di
dividere la "stringa" in tanti int64 ed eseguire i calcoli parziali
li, ho provato ma senza successo.
Grazie 
 
Massimo

differenza che gestisce molte piu' cifre
:O !!!
Curiosita': chi ha bisogno di una calcolatrice che visualizzi numeri cosi'
grandi?
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 grandi?
Berlusconi, per il suo conto in banca? ;)

 li, ho provato ma senza successo.
Max, ti avevo gia' risposto poco fa: sommi il divisore tante volte finche'


 ha scritto nel messaggio
news:c680pe$6lqjq$1...@ID-43509.news.uni-berlin.de...

Seee, certo.... :-D

> Seee, certo.... :-D
non hai mai fatto la divisione per sottrazioni successive? :O

> Seee, certo.... :-D
esempio:
somma:=0; quoziente:=0; resto:=0;
while somma<=dividendo do begin
 somma:=somma+divisore;
 quoziente:=quoziente+1;
 if somma>=dividendo then begin
  resto:=somma-dividendo;
  if somma>dividendo then quoziente:=quoziente-1;
  break;
 end;
end;
chiaramente le operazioni + e - dovrai sostituirle con le tue routine di
somma e sottrazione per i numeri "grandi", che hai gia' detto di aver
realizzato.

Ciao
"Max" <fdr...@SpAmMaTuAsOrElLaservidellagleba.it> ha scritto nel messaggio
news:KpNhc.16432$Qc.6...@twister1.libero.it...

Guarda che funziona... magari non sarà ottimizzato, ma fa esattamente quello
che chiedi.. Certo che comunque il resto non sarà in decimali...
Matteo

Seee, certo.... :-D
Perche' no?
La cpu, quando fai una divisione, la esegue con il metodo delle addizioni.
Stando ali miei ricordi di assembler, lo z80 sapeva fare solo addizioni shift
di bit. Da li', sei ingrado di fare moltiplicazioni, sottrazioni e divisioni.
:-) 


 non hai mai fatto la divisione per sottrazioni successive? :O
Guarda, forse non mi sono capito, oppure pensavo stessi scherzando....
200 cifre di dividendo.
Se il divisore ha anche solo 10 cifre in meno, non solo "non e'
ottimizzato", e' eterno!!
Insisto sull'implementazione dell'algoritmo "classico" che, almeno a me, ha
dato molte soddisfazioni.
Ciao
 Max

 :-)
Ti rimando alla risposta che ho dato a Zortek
Ciao
 Max

 quello sara' il quoziente; e con una semplice differenza otterrai il resto.
L'unico problema e' che per lui la stringa '001' e' maggiore di '2'
quindi, con le stringhe, non riesco a fare ciò che dici, provero'
invece con delle semi-somme, cioe' divido la stringa in numeri che
entrano in un double e mi calcolo l'eventuale riporto.
Se qualcuno ha qualche altra idea........
PS La calcolatrice serve ad un medico-chirurgo per un paziente ma non
so dirvi a che cosa
Massimo

 entrano in un double e mi calcolo l'eventuale riporto.
Facci sapere
Ciao
 Max

  Max
Per il momento ho risolto con il fatto che non devo implementare la divisione...
Grazie a tutti
Massimo