Newsgroup: it.comp.lang.c
Titolo: aumento della precisione

Salve a tutti,
volevo porre una domanda, e' possibile via software avere una precisione 
piu' alta, anche non necessariamente con i floating point ma almeno con 
gli interi.
Grazie anticipatamente della vostra attenzione


Certamente. Via software.
Usando per esempio le librerie gmp della gnu per il calcolo
in precisione arbitraria. Sono facili da usare, molto performanti e 
gratuite.
Le trovi da scaricare qui:
http://www.swox.com/gmp/
Se ti servono interi piu' grandi, ma non necessariamente grandissimi,
tieni conto che ormai molti compilatori  permettono
di usare dei "long long int" signed o unsigned che tipicamente
sono rappresentati su 8 byte (invece dei tipici 4 dei long e degli int)
permettendo quindi di manipolare nella versione unsigned numeri
compresi tra 0 e 2^64-1 = 18,446,744,073,709,551,615
(per i numeri signed ovviamenti dimezzi circa il valore assoluto).
ciao,
g.

 gli interi.
Piu'  alta di che ? Se intendi della massima che il compilatore mette a 
disposizione (ma ogni compilatore puo'  averne una diversa), si'  e' 
possibile definire un tuo tipo dati corrispondente a precisione 
arbitrariamente alta. Naturalmente tutte le manipolazioni del nuovo tipo 
dati andranno realizzate via SW.
Questo lo puoi fare sia con gli interi sia con i floating point. E' 
anzi un ottimo esercizio di programmazione.
Giorgio

 dati andranno realizzate via SW.
Grazie mille della tua risposta Giorgio, dalle mie ricerche credevo 
fosse possibile solo disponendo di un hardware non conforme al IEEE.
Cmq ti sarei grato se m'indicassi come iniziare per fare una cosa del 
genere perche' non ne ho proprio idea.

Giorgio Pastore ha scritto:

..che io sto svolgendo. Somma, sottrazione, complemento e shift sono 
stati molto facili da realizzare, ma per quanto riguarda moltiplicazione 
e divisione come faccio? Avevo pensato alle somme successive per la 
moltiplicazione ma mi sembra una cosa troppo lunga. Per le divisioni 
avevo pensato di sottrarre al primo numero il secondo e contare le volte 
che era possibile farlo senza andare sotto lo 0. Questo mi sembra 
ridicolo oltre che lento. Mi puoi dare qualche traccia per favore? 
(niente soluzione pero' :-)
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org


Non esiste una lib gia fatta ... bignum o qualcosa di simile ?

 Non esiste una lib gia fatta ... bignum o qualcosa di simile ?
La libreria gmp della gnu. ottima:
http://www.swox.com/gmp/
ciao,
g.

 
Vero. Ma usa l'aritmetica fp, mentre io mi riferivo a quella intera. 
Comunque e' stato interessante leggere il suo codice sorgente.


 Comunque e' stato interessante leggere il suo codice sorgente.
Scusa, ma la uso spesso e posso dirti che non e' vero.
La libreria gmp della gnu contiene tre famiglie di routines,
una per gli interi (che e' proprio quella che uso io)
una per i razionali e una per i numeri in floating point.
ciao,
g.

 una per gli interi (che e' proprio quella che uso io)
In quale file la trovo? Io vedo solo la parte fp.. o forse non ho 
scaricato tutto?


 scaricato tutto?
Se vai alla pagina:
http://www.swox.com/gmp/#DOWNLOAD
e scarichi tutto il pacchetto
gmp-4.1.4.tar.gz
(l'indirizzo diretto e' questo:
http://ftp.sunet.se/pub/gnu/gmp/gmp-4.1.4.tar.gz
)
e poi scompatti tutto ti trovi
una directory chiamata gmp-4.1.4
Le routine intere sono nelle
sottodirectory mpz (routine intere, quelle che di solito
uno invoca) e mpn (routine intere a basso livello, c usate internamente 
da quelle di mpz.)
comunque nel manuale ci dovrebbe essere scritto:
http://www.swox.com/gmp/gmp-man-4.1.4.pdf
anche perche' se non leggi il manuale non
credo tu posssa districarti agevolmente nel
codice sorgente, che e' piuttosto complesso,
sia perche' tiene conto di molte architetture
con pezzi di codice macchina per le parti piu'
critiche, sia perche' in effetti gli algoritmi
usati per alcune cose, tipo moltiplicazione e
divisione sono piuttosto sofisticati.
Nel manuale ci dovrebbe essere anche una sezione in
cui vengono accennati alcuni degli algoritmi utilizzati.
ciao,
g.

Giovanni Resta ha scritto:

Grazie. Non so cosa avevo scaricato prima ma adesso sembra che ci sia 
tutto...
