Portál AbcLinuxu, 10. května 2025 05:55
pisi maly program v c-cku a potreboval bych vedet, jak dlouhy je double, nebo lepe jaka je jeho presna bitova struktura (kolik bitu je exponent atp.). Jak to na danem systemu zjistim? Jedna se o architekturu i386, gcc-4.1 (distro debian testing).
Dekuj za radu :)
Zdravi Michal
sizeof()
. Na velikost mantisy a exponentu se zkuste podívat třeba do seriálu, který nedávno vyšel na Rootu, je to asi tak druhý nebo třetí díl.
dekuji za odpoved, upresnim svuj problem: ja dostanu z pristroje 8byte, z toho prvnich 11 jsou "exponent bits" a zbylych 52 jsou "fraction bits" podle EEE754. Kdyz ted nactu techle 8byte do promene typu double (sizeof(double)=8, alespon na mem systemu), tak dostavam hodnotu o 4 rady mensi, napriklad misto 0.2 dostanu 0.00002. Hledam pricinu problemu. Napadlo me, jestli je opravdu ulozeny double podle EEE754 i na mem systemu. Proto dotaz, jak to zkontroluji?
jeste presneji, pristroj vraci hodnotu ve tvaru :
(ascii)0(ascii)#(binary)110100....
cili prvni dva byte jsou ascii 0 a ascii #, pak nasleduje 64 bitu.
nactu tedy vsechno (celkem 10 byte) do pole typu char a pak provedu
pointer_na_double=pole + 2;
No a chova se to jak jsem uvedl vyse... :)
Jeste jednou dekuji za pomoc
Zkuste se podívat na hodnoty maker FLT_RADIX
(mělo by být 2), DBL_MANT_DIG
, DBL_MIN_ËXP
a DBL_MAX_EXP
(je potřeba includovat <float.h>
), z nich by to mělo být vidět. U mne je to (na x86 i x86_64) 2, 53, 1024, -1021. Takže by to mělo být 53 bitů mantisy, 1 bit znaménko a 10 bitů exponentu.
V každém případě bych ale doporučoval nespoléhat na kompatibilitu binárního zápisu a napsat si na to konverzní funkci. Ušetříte si tím těžkou hlavu, kdybyste to někdy chtěl portovat na jinou platformu (třeba big endian).
moc dekuji, to je ono :) Na mem systemu jsou hodnoty totozne tj. 2, 53, 1024 a -1024.
Ano, kompatibilita mym resenim trpi. Mohl bych vsechna data nacist jako ascii a pak je zkonvertovat pomoci atof(), coz je z hlediska kompatibility bezproblemove. Nicmene rad bych se tomuto reseni vyhnul kvuli rychlosti. I za cenu ztraty kompatibility.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.