Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Norma IEEE 754 a příbuzní: formáty plovoucí řádové tečky

mezek
mezek (neregistrovaný)
31. 5. 2006 6:54 Nový

presnost formatu

celé vlákno
Dobry den,

neni mi jasny vyznam presnost, myslel jsem ze odpovida tomu kolik decimalnich cifer je schopna pojmout mantisa, to ale u minifloatu (ve vete pod nadpisem zrejme spatne oznacen za microfloat) dava pouze asi 3 cifry a microfloat jen jednu cifru.
V predchozim dile je v kapitole 5 napsano xFX=b^e*m, ale asi by melo byt xFP=...
Jinak pekny.

zdravi Mezek
Pavel Tišnovský aura:98
31. 5. 2006 9:15 Nový

Re: presnost formatu

celé vlákno
Dobry den,

ty dva prepisy (microfloat/minifloat a FP/FX z minula) uz jsem Petrovi K. nahlasil a jsou opraveny - dekuji za upozorneni.

S presnosti mate v podstate pravdu, vetsinou se udava, kolik cislic (cifer) je mozne v mantise ulozit. U Microfloatu a Minifloatu se vsak udava presnost vyssi, nez by odpovidalo tomuto vypoctu (ten je vlastne dan vztahem log_2(|m|)), protoze se berou do uvahy jeden az dva nejnizsi bity exponentu, ktere mantisu "posouvaji" o jedno az dve binarni mista doprava ci doleva: neni to vsak uplne korektni, to je zapotrebi rici, protoze posunem NEziskame dalsi bity vpravo.
ilicz
ilicz (neregistrovaný)
31. 5. 2006 9:13 Nový

Překlad

celé vlákno
<nospam>Pavle, nemůžu si odpustit... Myslím že v našich luzích a hájích je obvyklejší překlad "plovoucí řádová čárka"</nospam> ;o)
Pavel Tišnovský aura:98
31. 5. 2006 9:31 Nový

Re: Překlad

celé vlákno
Já vím a docela dlouho jsem byl na pochybách, jestli psát řádová čárka či tečka. Nakonec - vzhledem k tomu, že jde vlastně o odborněji laděný článek, ve kterém předpokládám, že čtenář umí anglicky - jsem se spíš přiklonil k řádové binární/desetinné tečce, viz část prvního odstavce z prvního dílu tohoto seriálu:

"V tomto textu se budeme záměrně dopouštět drobného prohřešku oproti stávající normě českého jazyka, protože budeme neustále psát o řádové, desetinné a binární tečce a nikoli čárce – z hlediska anglické terminologie to bude více konzistentní, i když z češtinářského hlediska by bylo zcela jistě korektnější psát o řádové čárce, protože se v češtině celá část čísla od části desetinné odděluje právě čárkou a nikoli tečkou, jak je tomu zvykem v anglosaských zemích (programátoři, kterým je tento článek určen především, však tuto skutečnost zcela jistě znají)."

U mě to bylo tak 51:49 :-) pro binární tečku, ale pokud se čtenáři/diskutující přikloní k čárce, budu to samozřejmě v dalších částech seriálu akceptovat.
JK
JK (neregistrovaný)
31. 5. 2006 9:43 Nový

Re: Překlad

celé vlákno
Já bych to dělal schizofrenicky - psal bych o čárce a používal bych tečku.
Mti.
Mti. (neregistrovaný)
31. 5. 2006 16:42 Nový

Re: Překlad

celé vlákno
stridat. At si uziji oba tabory. (hlasuju pro tecku)
uživatel si přál zůstat v anonymitě
31. 5. 2006 23:25 Nový

Re: Překlad

celé vlákno
Jakkoliv to zní divně, je to podle mě nejlepší řešení. Terminologie "plovoucí řádová čárka" je myslím dost zavedená a učí se to tak zřejmě na všech školách, kde se tyhle věci studují.
xxx
xxx (neregistrovaný)
1. 6. 2006 22:16 Nový

Re: Překlad

celé vlákno
tak tak, standardni termin je 'plovouci radova carka', ale je to celkem jedno. cesky se o tom obvykle moc nehovori :)
psx
psx (neregistrovaný)
31. 5. 2006 11:26 Nový

chybka

celé vlákno
"Vzhledem k tomu, že první bit umístěný před binární tečkou je u tohoto rozsahu vždy nastavený na nulu"

Ma tam byt "na jednicku".
Pavel Tišnovský aura:98
31. 5. 2006 16:10 Nový

Re: chybka

celé vlákno
Díky za bugreport, repostnu to redakci.
Pavel Píša
Pavel Píša (neregistrovaný)
31. 5. 2006 15:20 Nový

Byteorder a bitová pole

celé vlákno
Článek je velice hezký, jen bych chtěl upozornit na to, že příklad na převod/analýzu bitů formátu single není bezpečně přenositelný na jiné architektury či dokonce kompilátory.

Norma jazyka C nedefinuje vzestupné či sestupné pořadí položek v bitových polích. Příklad tedy nemusí fungovat na jiných architekturách. Explicitní použití uint32_t, posunů a maskování by tedy bylo správnější.

Nepamatuji si, že by norma IEEE 754 někde preferovala určitý endianing. Z toho vyplývá, že pořadí položek v paměti při přístupu po bytech též není specifikované. Většinou procesory ukládají single se shodným endianingem jako int32_t. Pro double je to většinou shodné s int64_t. Ovšem existují i komprocesory (například na ARMu), které ukládají obě slova z double v pořadí byte podle své architektury, ale pořadí slov je opačné.

Nejsou to věci až tak pro obvyklé uživatele PC podstatné, ale pokud pracujete s více architekturami tak jako my, tak je dobré si na to dát pozor a nespoléhat na to, že když to zrovna chodí na PC, bude to chodit i jinde.

Pro přenositelný kód lze použít hlavičkový soubor "ieee754.h" nebo "ieeefp.h" (NEWLIB). Ten definuje něco jako __BYTE_ORDER a __FLOAT_WORD_ORDER. Dále typy ieee754_float a ieee754_double pro přístup k jednotlivým položkám čísel.
Pavel Tišnovský aura:98
31. 5. 2006 15:38 Nový

Re: Byteorder a bitová pole

celé vlákno
Dobrý den,

máte naprostou pravdu v tom, že ten ukázaný převod mezi bitovými poli a FP hodnotou není přenositelný a to ani při "bytovém" přístupu (viz poslední odstavec této odpovědi). IEEE 754 se tímto nezabývá (už jen proto, že například architektura 68k atd. používá jiný endianing než x86), tam jsou popsány "pouze" formáty a aritmetické/konverzní operace, tj. případy, kdy je hodnota již uložená například v registru (ať už v mikroprocesoru či někde na FPGA či zadrátovaném FPU).

Jinak indexy bitů, tj. jejich polohy, jak jsou popsané v článku, jsou samozřejmě platné, ale opět až po načtení do registru, "bitový" pohled na paměť může být (a na x86 například je) odlišný.

Když už jsme u těch norem: měl jsem problémy s překladači Céčka na některých DSPčkách, protože ty chápaly byte jako 32bitů, což se kupodivu shoduje s definicí uvedenou v normě ANSI C (a možná také v ISO C, tu však nemám). Proto pozor, někdy může platit třeba toto:

sizeof(char) == sizeof(short) == sizeof(int) ==
sizeof(long) == sizeof(float) == sizeof(double) == 1

A tu jedničku nutno chápati ne jako 8 bitů ale 32 bitů (popř. na jiných DSP či CPU jinou hodnotu). Problémy jsou zejména s mallocem() a také při komunikaci s PC (měli jsme to DSP na vlastním PCI bastlu).
Pavel Píša
Pavel Píša (neregistrovaný)
31. 5. 2006 20:35 Nový

Re: Byteorder a bitová pole

celé vlákno
To je všechno v pořádku. C je totiž jazyk přenositelný a snaží se typy int a char mapovat tak aby se s nimi pracovalo nativně a co nejrychleji. Někdy z toho ale člověk šediví když potřebuje pevné délky. Norma C99 naštěstí konečne po 30 letech zavádí do C typy int32_t atd.

Mám takový pocit, že C99 již vyžaduje/doporučuje char osmibitový, což je svým způsobem škoda.

Indexy jsou sice v IEEE 754 definovány, ale v zásadě se to týká pouze registrů FPU. Po načtení čísla do celočíselných typů/registrů tedy nelze s jistotou nic říct. Viz ten ARM s VAX (mixed) endianingem.

Zdravím a těším se na další článek. Píšete to dobře a těšilo by mě, kdyby to naši studenti četli a uměli.
pafal
pafal (neregistrovaný)
5. 6. 2006 21:41 Nový

Dostupnost IEEE 754

celé vlákno
Dobry den,

je ieee754 volne dostupna (napr. v PDF ke stazeni) nebo je jako vetsina ieee norem k dispozici pouze za poplatek?

Jako student jsem to sveho casu hledal prahnuvse po poznani, uz ale nevim, s jakym vysledkem...

Diky za info.
DZ
DZ (neregistrovaný)
28. 7. 2006 14:51 Nový

BIAS u typu double

celé vlákno
Domnívám se, že bias u typu dobule není 2047, ale 1023.
tisnik
tisnik (neregistrovaný)
31. 7. 2006 8:42 Nový

Re: BIAS u typu double

celé vlákno
Mate pravdu, exponent je ulozeny na jedenacti bitech (rozsah 0..2047) a BIAS je 2^(EXP-1)-1, tj. 2^10-1=1023. Omlouvam se za "mlzeni", asi uz zapominam mocniny dvou :-)
Zasílat nově přidané příspěvky e-mailem