Newsgroup: it.comp.lang.c++
Titolo: Lavorare con grandi numeri

Ho provato la calcolatrice di Hackman e ho notato che riesce a
lavorare con numeri fino a 1024 bit. Interessante.
Come si puo' realizzare una classe che gestisca grandi numeri in C++?
Un po' a intuito e un po' con ricerce su internet ho trovato che si
puo' usare un char per ogni numero. Ci sono soluzioni migliori?
Ciao
-- 
Scritto da Gordon
E-mail: tbeqba@_EVZHBIVZV_avpu.vg

 
usare un long per ogni numero? :)
-- 
"Son buoni tutti a fare i gay con il culo degli altri"

usare un long per ogni numero? :)
mi sono espresso male, ora che rileggo il messaggio.
intendevo un char per ogni cifra del "grande numero".


 Ci sono soluzioni migliori?
Dipenda da cosa intendi per "migliori"
A me verrebbe in mente di concatenare più unsigned int
Usare un array di, per esempio, 32 unsigned int su wintel
ottieni un numero a 1024 bit, appunto.
A quel punto di scrivi gli operatori base e via...
Ma non sono un esperto di grandi numeri. Magari ci sono
altre soluzioni, per altri versi "migliori".
E sicuramente c'è un sacco di roba già implementata al riguardo...
-- 
Gerolamo

 
certo
puoi inventarti numeri a 128 bit come 4 numeri a 4 bit ridefinendo 
opportunamente l'aritmetica
class bignumber
{
int a_[4];
//implementazione
};
ridefinendo opportunamente le operazioni ...
per esempio il a[0] sono i primi 32 bit, quelli piu' a sinistra ... 
eccetera
quando fai le operazioni per esempio come l'addizione puoi sommare gli 
array e gestire " i resti" un po come si fa a mano ...
in pratica è come se lavorassi con numeri di 4 cifre in base 2**32 (o 
qualcosa del genere)
usare i char e lavorare in base 10 usando byte che possono andare fino a 
256 è uno spreco .. in tal caso anche "A" è una cifra e va sfruttata per 
motivi di efficienza
in tal caso potresti fare
class 256number
{
char a[4];
//implementazione
}
-- 
Hai recensioni nel cassetto di musica, cinema, letteratura,fumetti??
Ascolta e pentiti e se hai tempo vergognati
http://tonysuper.altervista.org

ho postato mentre tu scrivevi ed abbiamo detto le stesse cose
;-)


 cose ;-)
:-))
Più che altro il mio post è pieno di refusi di battitura...
...devo cominciare a pranzare più leggero...
-- 
Gerolamo

Gordon wrote:

pessima idea, usi solo 10 valori dei 256 che hai a disposizione.. vedi 
gli altri post per una spiegazione + dettagliata di quello che intendevo io.


 puoi inventarti numeri a 128 bit come 4 numeri a 4 bit ridefinendo
4 byte ovviamente non bit
suggerisco le classi di boost per i grandi numeri e le classi di
http://oonumerics.org
 (non mi ricordo se ci va il www)
Object oriented numerics che raccoglie tutte le librerie 
scientifico/matematiche del c++


256 è uno spreco ..
infatti mi sembrava.


 
 
  Non e' uno spreco, e' l'unico modo di gestire numeri "quanto si vuole
  grandi". Ovvero, mi spego meglio:
  Il numero: 
  232349835489736854936754896785467548678543543678654783654785489657849
  anziche' leggerlo in un intero, float o quel che e', se lo si legge
  come fosse una stringa (array di char) permette di fare la somma con:
  6547900236784936854907546789567849678549468590765407893654078936540789
  sommando le cifre di potenza corrispondente, senza dover sapere 
  a priori  quanto sara' grande il numero. 
  E' uno spreco, si', ma in alcuni casi e' il modo giusto di procedere.
 
  Almeno, questo e' il tipo di approccio che adotta (pare) il programma
  free 'bc'.
  Suggerisco un'occhiata ai sorgenti.
  ciao ciao,
  P. 
--
Home Page :    
www.lulli.net