[ reiser @ 16.05.2004. 09:55 ] @
Imam promenljivu Large tipa Extended i promenljivu FLine tipa String. E sad, ako pokusam da sa FloatToStr konvertujem Large u FLine, dobijam string u kome se nalazi Large, ali u exponencijalnom zapisu (recimo, 1.2324234234E3024).
Kako da konvertujem ceo Large u FLine, ali da mi FLine sadrzi sve brojke koje se nalaze u Large promenljivoj ? FloatToStrF, FloatToText ?
[ morlic @ 16.05.2004. 10:43 ] @
Da li si probao FormatFloat():


s := FormatFloat('#0.000000000000000000', f)


Eksperimentisi.
[ reiser @ 16.05.2004. 20:03 ] @
Evo probao sam, btw, ipak ne uspevam da dobijem zeljeni rezultat.
U mom slucaju, promenljiva tipa extended ima najcesce 3000+ cifara.
[ -zombie- @ 17.05.2004. 00:10 ] @
hmm.. možda promenjiva ima 3000 cifara, ali ne verujem da ima mnogo više od 20tak _značajnih_ cifara. pogledaj delphi help i raspitaj se malo kako se realni brojevi predstavljaju u računaru..
[ morlic @ 17.05.2004. 18:34 ] @
Zombi je u pravu, pogledaj dokumentaciju:

Type Range Significant digits Size in bytes
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8

Tako da ti ne mozes da imas nikako 3000+ cifara. Jednostavno to ne funkcionise tako. Negde gresis, a gde...daj vise informacija.
[ reiser @ 17.05.2004. 19:46 ] @
Zar 1.1 x 10^4932 nema 4932 cifre ? Nije mi bas jasno sve ovo...
Pokusavam da pravim neki algoritam za kompresiju.
[ morlic @ 18.05.2004. 15:42 ] @
Obrati paznju:

Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10

Maksimalni broj koji moze biti zabelezen je:

1.1 puta (10 na 4932)
[ reiser @ 18.05.2004. 19:54 ] @
10^4932 je 1000000...0000 (4933 cifre, racunajuci i jedinicu)
Znaci 1.1 * 10^4932 je 11000000...0000 (opet 4933 cifre, racunajuci i jedinice)

Tako da extended moze da sadrzi sve brojeve manje od 1.1 * 10^4932, tj. manje od 110000...0000 (4933 cifre) (donju granicu ne gledamo) ?
[ morlic @ 19.05.2004. 00:06 ] @
Pogledaj:

http://www.mindspring.com/~efd/acc101.htm

http://www.cse.iitd.ernet.in/~dheerajb/CS210_lect03.pdf

http://www.math.grin.edu/~ston...s/fundamentals/IEEE-reals.html


U pitanju je nacin na koji se pamti broj u memoriji.

Probaj da u win kalkulatoru uradis:

1.1 puta (10 na 4932) pa od toga oduzimaj npr. po 1 trilion i pogledaj sta se desava. Reklo bi se da trilion nije tako veliki broj :)
[ morlic @ 19.05.2004. 00:11 ] @
Citat:
morlic:
Obrati paznju:

Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10

Maksimalni broj koji moze biti zabelezen je:

1.1 puta (10 na 4932)


Nisam se dobro izrazio ovde. Dakle ovo je maksimalan broj ali je u pitanju nacin na koji se brojevi u pokretnom zarezu pamte i zbog koga nije moguce pamtiti sve brojeve u rasponu koji je napisan. Zato ti i pise broj cifara na koji se mozes osloniti prilikom upisa podataka.