Posted By: Quasimodo (Quasimodo) on 'CZprogram'
Title: Re: Pokud nejaky javista nema co delat...y
Date: Mon Dec 6 21:51:00 2004
> > Pravda, pro nacitani pascal floatu to jeste takova tragedie neni, pro
> > ukladani
>
> Uaaaa... byl jsem nucen to jednou delat v Ccku... snaha byla, vzdal
> jsem
> to a nakonec vyresil tak, ze jsem z Pascal runtime vybagroval jak se tyto
> parametry cpou do FPU a udelal to stejne a pak si to v C z FPU precet...
> vim,
> jsem prase...:-) (ale funkcni to bylo)
>
Taky si vsimni, ze tu bylo nekolik odpovedi, ze to bude vicemene stejne, jako
jsem to napsal v C, ale kousek zdrojaku, ktery by do souboru ulozil float jako
"real48" z nikoho nevypadnul. :-)
Ten muj kousek kodu taky chodi, ale kamken urazu je v tom, dostat se
k jednotlivym bytum v ukladanem floatu. Kdybych to musel delat v jave/C#, tak
jedine co me napada, je nacpat to do nejakeho inmem souboru (snad je v nich
obdoba C++ strstreamu) a pak to zase nacist jako pole bytu. Coz je ale dost
drevacke reseni. Samozrejme, da se to delat i jen "matematikou", ale kdyz jsem
to tenkrat zkousel v cecku, tak ztrata presnosti byla zarazejici. (A to se
vsude jen delilo a nasobilo mocninama 2, takze TEORETICKY stacilo soupat
doleva a doprava a vsechno bude krasne. Praxe ale byla trosku jina (nevim
proc, ale kecalo do toho jakesi zaokrouhlovani)...
Pokud by se na to chtel nekdo vaznejc podivat, tak ten pascal real48 ma
v pameti zapis:
smmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm eeeeeeee
Zatimco C float (myslim ze to je IEEE 754)
seeeeeee emmmmmmm mmmmmmmm mmmmmmmm
s je sign, m mantisa a e exponent
Takze primym presunem prislusnych bitu se to dela dost obstojne - pokud se
k nim clovek dostane... :-)
Nastesti s necim takovym se clovek potkava docela zridka. Je to jen takova
moje slaboducha potreba rypat do modernich jazyku typu javaa, ze se dokonale
zbavily nastroju, jak si snadno zpristupnit interni reprezentaci typu. Sice
jsou zapotrebi neprilis casto, ale pak mohou resit jinak skoro neresitelne
problemy.
Jeste mam jeden podobny prikladek, jeste mene prakticky, ale bohuzel z praxe:
potreboval jsem pro instanci jakesi tridy v programu zjistovat, jestli jista
virtualni metoda je tataz, jako metoda nejakeho predka a pokud ne, vykonat obe
a porovnat vysledky. Protoze nevim o zadnem nastroji uvnitr C++ (a ani v
jave), ktery by tohle delal, musel jsem sahnout do tabulky virtualnich metod a
hrozne nadaval na autora knihovny, ze musel zrovna tuhle metodu overridnout
(jakesi polynomialni regrese nad urcitymi mnozinami bodu, knihovna si sama
urcovala stupen polynomu podle vlozenych dat a k nim vymyslela tridy zahadnych
vlastnosti), misto aby zalozil novou... Typeid pouzit neslo - krome bazove
tridy jsem nemel k dispozici prototypy. To byl za celou moji praxi jedny
pripad, kdy me skutecne zajimalo, kam a jak se k objektu lepi virtualni
tabulky, ale zrovna tehdy to bylo docela nutne. Jak na takovy problem jit bez
pointeru netusim. Nejspis napsat si tu knihovnu na regrese sam... bohuzel pro
me je odhad optimalniho stupne polynomu pro prokladani cira magie. :-)
-
Clovek je nejpomalejsi zname zarizeni typu I/O.
Quasimodo