View Full Version : [C++] Numeri grassi grassi
Avevo in mente di fare dei programmi di calcolo matematico (tipo calcolo del Pi greco o roba del genere...) e quindi mi interessava di poter lavorare con numeri con molte cifre (long double nn mi basta).
Avete mai fatto cose del genere? (se si datemi qualche consiglio... :sbav: )
Io avevo in mente di gestire i numeri come dei vettori (di tipo int) grandi a piacere... in questo modo però dovrei ridefinire le operazioni (somma, moltiplicazione, radice quadrata, ecc...)?
Voi avete qualche idea?
RBlade79
27-01-2005, 08:13
Prova ad usare le librerie MIRACL...sono state create per definire e gestire numeri molto grandi (vengono usate per giocare con gli algoritmi crittografici...).
Prova a dare un'occhiata QUI (http://indigo.ie/~mscott/)
RaouL_BennetH
27-01-2005, 18:27
Da quel poco che ne so, mi sembra che però il C++ non sia il linguaggio più indicato per fare quello che vorresti; se non erro c'è il fortran che più si adatta allo scopo. O devi operare per forza di cose in C++ ?
Originariamente inviato da Jonny32
Io avevo in mente di gestire i numeri come dei vettori (di tipo int) grandi a piacere... in questo modo però dovrei ridefinire le operazioni (somma, moltiplicazione, radice quadrata, ecc...)?
Ovvio che dovresti ridefinirti le operazioni...non è difficile comunque da fare... In teoria, se dovessi lavorare sugli interi (anche se si può generalizzare a numeri in virgola fissa) potresti fare operazioni definendo ogni cifra come un intero 2^32... Non è complesso... Ti cerco qualcosa...
Intanto grazie a tutti delle risposte...
Originariamente inviato da RaouL_BennetH
Da quel poco che ne so, mi sembra che però il C++ non sia il linguaggio più indicato per fare quello che vorresti; se non erro c'è il fortran che più si adatta allo scopo. O devi operare per forza di cose in C++ ?
Questa cosa che ho in mente la vorrei fare in c++ anche perchè conosco solo quello e il vb6 (purtroppo...)
Originariamente inviato da cionci [/B]
In teoria, se dovessi lavorare sugli interi (anche se si può generalizzare a numeri in virgola fissa) potresti fare operazioni definendo ogni cifra come un intero 2^32...
:huh: :uh:
^TiGeRShArK^
30-01-2005, 21:31
e utilizzando direttamente un array di bit???
Originariamente inviato da Jonny32
:huh: :uh:
Immaginati uno scatolotto che fa la somma fra due numeri in base dieci...
Questo scatolotto a 3 ingressi, A e B (i due operandi), Cin il riporto in ingresso...
E due uscite...Res (risultato) E Cout il riporto in uscita...
Res = (A + B + Cin) % 10 (modulo 10)
Res = (5 + 6) % 10 = 1
Cout = 1 se A + B >= 10
Questo stesso discorso lo puoi fare per un numero in base 2^32:
Res = (A + B + Cin) % 2^32
Cout = 1 se A + B >= 2^32
Se metti due scatolotti in fila (il Cout del primo entra nel Cin del secondo) hai fatto un sommatore a 64 bit ;)
Gli ingressi del primo blocco saranno i primi 32 bit degli operandi, gli ingressi del secondo saranno i secondi 32 bit...
E così via virtualmente all'infinito...
pipozzolo
01-02-2005, 10:46
Originariamente inviato da cionci
Immaginati uno scatolotto che fa la somma fra due numeri in base dieci...
Questo scatolotto a 3 ingressi, A e B (i due operandi), Cin il riporto in ingresso...
E due uscite...Res (risultato) E Cout il riporto in uscita...
Res = (A + B + Cin) % 10 (modulo 10)
Res = (5 + 6) % 10 = 1
Cout = 1 se A + B >= 10
Questo stesso discorso lo puoi fare per un numero in base 2^32:
Res = (A + B + Cin) % 2^32
Cout = 1 se A + B >= 2^32
Se metti due scatolotti in fila (il Cout del primo entra nel Cin del secondo) hai fatto un sommatore a 64 bit ;)
Gli ingressi del primo blocco saranno i primi 32 bit degli operandi, gli ingressi del secondo saranno i secondi 32 bit...
E così via virtualmente all'infinito...
Questo è molto semplice per i numeri interi ma non lo è altrettanto per i numeri frazionari (credo sia quello che cercava), seguendo il formato IEEE bisogna ridefinire segno esponente e mantissa e reimplementare tutti gli operandi... niente di allucinante ma è un pò più complesso.
Comunque credo che qualcosa di già pronto si trovi, visto che se non sbaglio tramite SSE/SSE2 erano state introdotte molte istruzioni per operare su dati di grosse dimensioni.
Originariamente inviato da pipozzolo
Questo è molto semplice per i numeri interi ma non lo è altrettanto per i numeri frazionari (credo sia quello che cercava),
Dipende...se si implementa un sistema a virgla fissa è assolutamente identico ;) Anzi...volendo si potrebbe anche implementare un sistema in virgola mobile a cifre infinite...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.