Portál AbcLinuxu, 10. května 2025 05:55

Dotaz: jak dlouhy je double?

26.7.2006 13:35 hajoucha | skóre: 22
jak dlouhy je double?
Přečteno: 75×
Odpovědět | Admin
Dobry den,

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

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.7.2006 14:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak dlouhy je double?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co se týká celkové velikosti, použijte 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.
26.7.2006 14:28 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: jak dlouhy je double?

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

26.7.2006 14:52 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: jak dlouhy je double?

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).

26.7.2006 15:15 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: jak dlouhy je double?

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.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.