Newsgroup: it.comp.lang.c
Titolo: Conversione da long double a string

Salve, mi chiamo Giuseppe Colucci, sono uno sviluppatore C/C++ ed il
problema che sto per proporre, riguarda la conversione in linguaggio 'C' di
un long double in stringa. 
La domanda sembra banale, ma non lo è in quanto il numero da convertire
supera le
50 cifre senza i numeri decimali.
Es.
long double b;
char
a[]={"6923746953278653245275328956327563278596328597326789326532897563278561
"};
b = _strtold(a); es. 692374695327865e120
b essendo dichiarato long double assume un valore esponenziale e nel
momento che lo converto in stringa con le funzioni fcnv, etc.  mi ritornano
esatte solo le prime 16 cifre significative. Dato che sto facendo una
procedura dove la precisione è fondamentale e i numeri sono molto grandi,
vorrei cortesemente approfittare della vostra disponibilità per risolvere
questo problema.
da b come posso riavere in maniera esatta a?
Ringrazio tutti per la gentile collaborazione.
Colucci Giuseppe
S. Martino in Pensilis (Cb)
cgiu...@aliseo.it
--
Automatic posted from 
ghibli.aliseo.it
 [195.32.72.1]
via Mailgate Server - 
http://www.mailgate.org

Non penso che il tuo problema sia la conversione di un long double in
stringa e viveversa, in quanto il tipo long double non potrà comunque
garantire la precisione di cui hai bisogno!
Il tipo long double permette di memorizzare numeri compresi tra 3,4*10^-4932
e 1,1*10^4932, ma nel contempo occupa uno spazio di "soli" 80 bit nei quali
non è chiaramente possibile memorizzare numeri di 4932 cifre. Da questo la
necessità di "tagliare" parte delle cifre significative utilizzando una
rappresentazione interna di tipo Mantissa/Esponente i cui "effetti
collaterali" sono appunto quelli in cui ti sei imbattuto.
Per risolvere il tuo problema l'unica idea che mi viene è ricorrere al C++ e
creare una classe che rappresenti il nuovo "tipo" per il quale andranno
ridichiarati tutti gli operatori matematici che ti servono oltre alle
funzioni di conversione da-a stringa.
Ma a parte questo....A CHE C_ _ _ O TI SERVE UN NUMERO DI 50 CIFRE CON
RISOLUZIONE DI UNA UNITA'?!??!?! Con un numero di "appena" 23 cifre potresti
misurare il diametro della nostra galassia utilizzando come unità di misura
il millesimo di millimetro !!!!!!
......forse dovresti rivedere un attimino i tui calcoli!
ciao BR66

esatte solo le prime 16 cifre significative. Dato che sto facendo una
per quanto ne so le cifre significative di un long double dovrebbero
essere 19/20, percio` non puoi superare questo limite, che e` dovuto
al processore e non alla libreria. esistono comunque molte librerie
che consentono di fare calcoli con precisione arbitraria, l'unico
svantaggio sono le prestazioni nettamente inferiori.
--
[ranger, email: 
ran...@queen.it
]
ICQ# 6585343

>da b come posso riavere in maniera esatta a?
Non e' possibile riavere in maniera esatta a, perche' l'informazione e'
andata persa.
D'altronde, non vedo come tu possa pretendere di far entrare un numero di
70 cifre (ebbene si, mi sono preso la briga di contarle) in un long double,
che in fondo ha solo 80 bit a disposizione (almeno credo) e pertanto puo'
contenere circa 80/log2(10) = 24 cifre in base 10.
Se e' necessario operare con una tale precisione, non resta che costruire
una classe (in C++), o una struttura (in C) che gestisca numeri con
precisione arbitraria. Tipi di dati del genere si trovano anche in comuni
librerie di strutture dati per il C/C++.
---------------------
homepage at
www.geocities.com
\SiliconValley\Pines\1406

contenere circa 80/log2(10) = 24 cifre in base 10.
anche meno una parte degli 80 bit e' usata per l'esponente 
Marco