home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 November / Chip_2002-11_cd1.bin / obsahy / Chip_txt / txt / 154-159.txt < prev    next >
Text File  |  2002-10-08  |  17KB  |  85 lines

  1. Jazyk C
  2. CΘΦko na p°elomu tisφciletφ (2.)
  3. V dalÜφ Φßsti povφdßnφ o novinkßch, kterΘ p°inesla druhß verze standardu ISO jazyka C (ISO 9899:1999), nejprve dokonΦφme kapitolu o celoΦφseln²ch typech a pak se podφvßme na typy pro prßci s reßln²mi a komplexnφmi Φφsly a na pravidla pro konverze.
  4.  
  5. Hodnosti
  6. CeloΦφseln²m typ∙m jsou nynφ v jazyce C p°i°azeny tzv. konverznφ hodnosti (conversion rank), kterΘ se krom∞ urΦovßnφ pravidel pro konverze uplat≥ujφ takΘ p°i specifikaci rozsahu. Hodnost musφ b²t pro r∙znΘ celoΦφselnΘ typy se znamΘnkem r∙znß, a to i v p°φpad∞, ₧e majφ stejn² rozsah hodnot. Uspo°ßdßme-li zßkladnφ znamΘnkovΘ typy podle hodnosti od nejvyÜÜφ, dostaneme posloupnost long long, long, int, short, signed char. Hodnosti typ∙ bez znamΘnek jsou stejnΘ jako hodnosti odpovφdajφcφch znamΘnkov²ch typ∙. Nejni₧Üφ hodnost mß typ _Bool. Typ char mß stejnou hodnost jako typy unsigned char a signed char. V²ΦtovΘ typy majφ stejnou hodnost jako jejich podkladovΘ celoΦφselnΘ typy. Pokud danß implementace obsahuje dopl≥kovΘ celoΦφselnΘ typy (extended integer types), musφ mφt dopl≥kov² typ ni₧Üφ hodnost ne₧ standardnφ celoΦφseln² typ se stejn²m rozsahem. Mno₧ina hodnot znamΘnkovΘho typu s ni₧Üφ hodnostφ musφ b²t podmno₧inou mno₧iny hodnot znamΘnkovΘho typu s vyÜÜφ hodnostφ. Odtud plyne, ₧e nap°. rozsah hodnot typu short nesmφ b²t v∞tÜφ ne₧ rozsah hodnot typu int, a dalÜφ podobnß pravidla pro typy se znamΘnkem i bez n∞j. (Tyto zßsady platily u₧ v p°edchozφ verzi standardu, nynφ ovÜem plynou z pravidla o hodnosti.)
  7.  
  8. CeloΦφselnß rozÜφ°enφ
  9. Jako celoΦφselnß rozÜφ°enφ (integer promotions) se oznaΦujφ konverze, kterΘ se provßd∞jφ s operandy n∞kter²ch unßrnφch nebo binßrnφch operßtor∙. Na mφst∞, kde se oΦekßvß celΘ Φφslo typu int nebo unsigned int, lze pou₧φt jakoukoli hodnotu typu, kter² mß menÜφ konverznφ hodnost ne₧ tyto dva typy. Lze tam takΘ pou₧φt hodnotu bitovΘho pole typu _Bool, signed int, int nebo unsigned int. Pravidlo pro celoΦφselnß rozÜφ°enφ je nynφ formulovßno takto: M∙₧e-li typ int reprezentovat vÜechny hodnoty typu konvertovanΘ hodnoty, p°evede se tato hodnota na typ int, jinak se p°evede na typ unsigned. V²sledek pro zßkladnφ typy je stejn² jako v p°edchozφ verzi, ovÜem formulace zalo₧enß na konverznφch hodnostech bere v ·vahu takΘ mo₧nost, ₧e danß implementace bude obsahovat i dalÜφ ("ro₧Üφ°enΘ", dopl≥kovΘ) typy.
  10.  
  11. Reßlnß Φφsla
  12. Stejn∞ jako starß verze standardu nßm i novß dßvß k dispozici t°i datovΘ typy pro prßci s reßln²mi Φφsly, a to float, double a long double. Nov² standard u₧ neuvßdφ long float jako synonymum pro double. V hlaviΦkovΘm souboru math.h jsou definovßny typy float_t a double_t, co₧ jsou reßlnΘ typy s alespo≥ takov²m rozsahem jako float, resp. double. Jejich skuteΦn² v²znam se °φdφ hodnotou makra FLT_EVAL_METHOD: Mß-li toto makro hodnotu 0, p°edstavujφ typy float_t, resp. double_t ve skuteΦnosti typy float, resp. double. Mß-li hodnotu 1, p°edstavujφ oba double, a mß-li hodnotu 2, p°edstavujφ oba long double. KonkrΘtnφ implementace m∙₧e definovat jeÜt∞ dalÜφ mo₧nosti.
  13.  
  14. ReßlnΘ literßly
  15. ReßlnΘ literßly lze nynφ zapisovat takΘ v ÜestnßctkovΘ soustav∞. Takov²to literßl zaΦφnß prefixem 0x nebo 0X, za nφm₧ nßsleduje ÜestnßctkovΘ Φφslo s °ßdovou Φßrkou a "exponentovß Φßst". V nφ ovÜem mφsto e nebo E musφme pou₧φt p nebo P. Tento exponent se vztahuje k zßkladu 2, nikoli k zßkladu 10 nebo 16 (!).
  16.  
  17. KontrahovanΘ v²razy
  18. ReßlnΘ v²razy mohou b²t kontrahovanΘ (contracted). To znamenß, ₧e se vyhodnocujφ jako atomickΘ operace a p°itom se ignorujφ zaokrouhlovacφ chyby danΘ zp∙sobem vyhodnocenφ. Nemusφ dokonce dojφt ani k vyvolßnφ v²jimek typick²ch pro reßlnΘ operace, kterΘ by jinak vznikly.
  19.  
  20. K povolenφ, resp. zakßzßnφ kontrahovan²ch v²raz∙ slou₧φ standardnφ direktiva #pragma STDC FP_CONTRACT ON resp. #pragma STDC FP_CONTRACT OFF
  21.  
  22. ZvlßÜtnφ hodnoty
  23. Novß verze standardu podporuje mj. poΦφtßnφ se "zvlßÜtnφmi" hodnotami reßln²ch Φφsel, pokud jsou v danΘ architektu°e k dispozici. Makro INFINITY (op∞t definovanΘ v math.h) se rozvine v kladnΘ nekoneΦno nebo v nekoneΦno bez znamΘnka, pokud je to v danΘ implementaci mo₧nΘ, nebo v kladnou konstantu typu float, kterß zp∙sobφ p°eteΦenφ v dob∞ p°ekladu. V implementacφch, kterΘ podporujφ "tich² NaN" pro typ float, by m∞lo b²t k dispozici makro NAN, kterΘ se rozvine v odpovφdajφcφ hodnotu. Ke klasifikaci Φφsel slou₧φ makra isnan(), isinf(), isnormal(), isfinite() a fpclassify(). Smysl v∞tÜiny z nich je jasn² z nßzvu; tato makra vracφ kladnou hodnotu, je-li jejich skuteΦn²m parametrem (v danΘm po°adφ) NaN, nekoneΦno, normalizovanΘ reßlnΘ Φφslo, resp. koneΦnΘ Φφslo. Makro fpclassify() vracφ celoΦφselnou hodnotu urΦujφcφ, do kterΘ kategorie skuteΦn² parametr pat°φ. Mo₧nΘ hodnoty jsou definovßny v math.h jako konstanty (op∞t vlastn∞ makra) FP_INFINITE, FP_NAN a dalÜφ.
  24.  
  25. P°φstup k v²poΦetnφmu prost°edφ
  26. V hlaviΦkovΘm souboru fenv.h najdeme nßstroje, kterΘ umo₧≥ujφ pracovat s v²poΦetnφm prost°edφm pro reßlnß Φφsla, tj. zjiÜ¥ovat a m∞nit jeho nastavenφ. (To se t²kß jak nastavenφ po₧adovan²ch standardem IEC 60559, tak i dalÜφch nastavenφ mo₧n²ch v danΘ architektu°e.) Datov² typ fenv_t slou₧φ k reprezentaci v²poΦetnφho prost°edφ pro reßlnß Φφsla jako celku. Hodnotu tohoto typu lze zφskat pomocφ funkce fegetenv(), nastavenΘ prost°edφ lze m∞nit pomocφ fesetenv(). Typ fexcept_t reprezentuje p°φznaky, pou₧φvanΘ v tomto prost°edφ, jako celek. Pro jednotlivΘ p°φznaky jsou definovßna makra FE_DIVIDEBYZERO, FE_INEXACT, FE_OVERFLOW a dalÜφ. Pro urΦenφ sm∞ru zaokrouhlenφ jsou k dispozici makra FE_DOWNWARD, FE_TONEAREST a dalÜφ. Stav v²jimek lze zjistit pomocφ funkce fegetexceptflag(), lze ho nastavit pomocφ fesetexceptflags(). DalÜφ funkce umo₧≥ujφ v²jimky vyvolßvat, nastavovat jejich p°φznaky atd. Funkce fegetround() zjistφ nastaven² zp∙sob zaokrouhlovßnφ, funkce fesetround() ho nastavφ. Chceme-li v n∞jakΘ Φßsti programu pracovat s v²poΦetnφm prost°edφm pro reßlnß Φφsla, m∞li bychom o tom informovat p°ekladaΦ pomocφ standardnφ direktivy #pragma STDC FENV_ACCESS ON a na konci tohoto ·seku pou₧φt direktivu #pragma STDC FENV_ACCESS OFF Smyslem t∞chto direktiv je umo₧nit optimalizace, kterΘ mohou zßviset na standardnφm nastavenφ v²poΦetnφho prost°edφ v danΘ architektu°e.
  27.  
  28. Komplexnφ Φφsla
  29.  
  30. Nejprve si zopakujeme n∞kterΘ d∙le₧itΘ pojmy. Komplexnφ Φφslo je, jak znßmo, vlastn∞ dvojice reßln²ch Φφsel. Mßme-li komplexnφ Φφslo z = (x, y), °φkßme, ₧e x je reßlnß Φßst Φφsla z a y je jeho imaginßrnφ Φßst. ╚φslo, jeho₧ reßlnß Φßst je nulovß, oznaΦujeme jako imaginßrnφ. SΦφtßnφ komplexnφch Φφsel je sΦφtßnφ po slo₧kßch, tj. (x, y) + (u, v) = (x+u, y+v). Podobn∞ je definovßno odeΦφtßnφ. Nßsobenφ je definovßno slo₧it∞ji, (x, y) x (u, v) = (xu-yv, xv+yu). Komplexnφ Φφslo i = (0, 1), pro n∞₧ platφ rovnost i2 = -1, oznaΦujeme jako imaginßrnφ jednotku (obΦas se mφsto i pou₧φvß j.). Komplexnφ Φφslo z = (x, y) Φasto zapisujeme ve tvaru z = x + iy.
  31.  
  32. Typy pro komplexnφ Φφsla
  33. Jazyk C nynφ nabφzφ t°i typy pro prßci s komplexnφmi Φφsly, a to float _Complex, double _Complex a long double _Complex. Jde pochopiteln∞ o dvojice reßln²ch Φφsel reprezentovan²ch pomocφ typ∙ float, double, resp. long double. O typu float _Complex °φkßme, ₧e jeho odpovφdajφcφ reßln² typ je float; podobn∞ definujeme odpovφdajφcφ reßln² typ pro zb²vajφcφ komplexnφ typy. Vedle toho m∙₧e implementace obsahovat t°i datovΘ typy pro reprezentaci imaginßrnφch Φφsel, a to float _Imaginary, double _Imaginary a long double _Imaginary. Jsou to vlastn∞ "obyΦejnß" reßlnß Φφsla, chovajφ se ale jinak p°i aritmetick²ch konverzφch. I v p°φpad∞ imaginßrnφch typ∙ hovo°φme o odpovφdajφcφch reßln²ch typech. Pro komplexnφ Φφsla jsou definovßny zßkladnφ aritmetickΘ operace. DalÜφ nßstroje pro poΦφtßnφ s komplexnφmi Φφsly jsou definovßny v hlaviΦkovΘm souboru complex.h.
  34.  
  35. Makra
  36. V hlaviΦkovΘm souboru complex.h najdeme mj. makra complex a imaginary generujφcφ klφΦovß slova _Complex a _Imaginary. Makro _Complex_I se rozvine v hodnotu typu const float _Complex p°edstavujφcφ Φφslo i, makro _Imaginary_I se rozvine v hodnotu typu const float _Imaginary p°edstavujφcφ Φφslo i. (Makra imaginary a _Imaginary_I jsou k dispozici pouze v implementacφch, kterΘ podporujφ typy _Imaginary.) Makro I se rozvine v _Imaginary_I nebo v _Complex_I.
  37.  
  38. MatematickΘ funkce
  39. V tomtΘ₧ hlaviΦkovΘm souboru najdeme takΘ °adu matematick²ch funkcφ pro komplexnφ Φφsla. Jejich jmΘna jsou podobnß jako jmΘna odpovφdajφcφch funkcφ pro reßlnß Φφsla, ale zaΦφnajφ p°edponou "c". Nap°φklad funkce pro v²poΦet komplexnφho sinu mß prototyp double complex csin(double complex z). Vedle tΘto funkce je k dispozici jeÜt∞ funkce csinf() s parametrem typu float complex, vracejφcφ hodnotu tΘho₧ typu, a funkce csinl() s parametrem typu long double complex, je₧ vracφ takΘ long double complex. Najdeme tu takΘ funkce creal() a cimag() pro zφskßnφ reßlnΘ, resp. imaginßrnφ Φßsti komplexnφho Φφsla, funkci conj() pro vytvo°enφ komplexn∞ sdru₧enΘho Φφsla a dalÜφ. N∞kterΘ z t∞chto funkcφ nejsou spojitΘ v celΘ komplexnφ rovin∞ obsahujφ tzv. °ez. Nap°φklad funkce csqrt(), p°edstavujφcφ druhou odmocninu z komplexnφho Φφsla, mß °ez podΘl zßpornΘ reßlnΘ poloosy: Budeme-li se k n∞jakΘmu bodu v tomto °ezu blφ₧it "shora" (z oblasti s kladnou imaginßrnφ Φßstφ), budeme dostßvat hodnoty v²razn∞ jinΘ, ne₧ kdy₧ se k tΘmu₧ bodu budeme blφ₧it "zdola", z oblasti se zßpornou imaginßrnφ Φßstφ. (Matematicky °eΦeno, v °ezu je tato funkce nespojitß.) V implementacφch, kterΘ obsahujφ kladnou a zßpornou nulu, lze t∞chto hodnot pou₧φt k rozliÜenφ "stran" °ezu.
  40.  
  41. Konverze
  42. Reßlnß Φφsla lze konvertovat na komplexnφ a naopak. P°i konverzi reßlnΘho Φφsla na komplexnφ Φφslo odpovφdajφcφho typu (tedy nap°. p°i konverzi typu double na double complex) se z reßlnΘho Φφsla stane reßlnß Φßst komplexnφho Φφsla a imaginßrnφ Φßst v²sledku bude 0. Podobn∞ v implementacφch, kterΘ obsahujφ imaginßrnφ typy, lze konvertovat hodnotu imaginßrnφho typu na komplexnφ Φφslo odpovφdajφcφho typu. Z imaginßrnφho Φφsla se stane imaginßrnφ Φßst v²sledku, reßlnß Φßst bude nulovß. Podobn∞ lze konvertovat komplexnφ Φφslo na reßlnΘ nebo imaginßrnφ; p°i t∞chto konverzφch se prost∞ "zahodφ" nepot°ebnß Φßst komplexnφho Φφsla. P°i konverzφch komplexnφch Φφsel se m∙₧e pochopiteln∞ m∞nit i "podkladov²" reßln² typ. V takovΘm p°φpad∞ se konvertuje jak reßlnß, tak imaginßrnφ Φßst podle pravidel pro konverze reßln²ch Φφsel.
  43.  
  44. ObvyklΘ aritmetickΘ konverze
  45. ╪ada aritmetick²ch operßtor∙ oΦekßvß, ₧e oba operandy budou stejnΘho typu. Pokud jsou r∙zn²ch typ∙, prob∞hnou tzv. obvyklΘ aritmetickΘ konverze (usual aritmetic conversions), kterΘ oba operandy p°evedou na spoleΦn² typ. Tento typ je pak zpravidla takΘ typem v²sledku. To je stejnΘ jako v p°edchozφ verzi jazyka C. OvÜem pravidla pro tyto konverze se zm∞nila; za prvΘ se berou v ·vahu hodnosti celoΦφseln²ch typ∙ a za druhΘ se musφ vypo°ßdat s komplexnφmi Φφsly. Nßsledujφcφ pravidla se uplat≥ujφ v uvedenΘm po°adφ:
  46.  
  47. * Odpovφdß-li typ jednoho z operand∙ typu long double, p°evede se i druh² operand na typ odpovφdajφcφ typu long double. (To znamenß, ₧e nap°. operand typu double complex se p°evede na long double complex.)
  48. * Jinak odpovφdß-li typ jednoho z operand∙ typu double, p°evede se i druh² operand na typ odpovφdajφcφ typu double.
  49. * Jinak odpovφdß-li typ jednoho z operand∙ typu float, p°evede se i druh² operand na typ odpovφdajφcφ typu float.
  50. * Jinak se na oba operandy aplikujφ celoΦφselnß rozÜφ°enφ a pak tato dalÜφ pravidla:
  51. *Jsou-li oba operandy ji₧ stejnΘho typu, nejsou t°eba ₧ßdnΘ dalÜφ konverze.
  52. * Jinak jsou-li oba operandy typu se znamΘnkem nebo jsou-li oba operandy typu bez znamΘnka, p°evede se operand s ni₧Üφ hodnostφ na typ s vyÜÜφ hodnostφ.
  53. * Jinak mß-li operand s typem bez znamΘnka stejnou nebo vyÜÜφ hodnost ne₧ typ druhΘho operandu, p°evede se operand znamΘnkovΘho typu na typ druhΘho operandu (typ bez znamΘnka).
  54. * Jinak m∙₧e-li typ se znamΘnkem reprezentovat vÜechny hodnoty typu bez znamΘnka, p°evede se operand "bezznamΘnkovΘho" typu na typ se znamΘnkem.
  55. * Jinak se oba operandy p°evedou na typ bez znamΘnka odpovφdajφcφ typu se znamΘnkem.
  56.  
  57. Tato pravidla vedou k podobn²m v²sledk∙m jako pravidla v p°edchozφ verzi standardu, umo₧≥ujφ ovÜem poΦφtat i s dalÜφmi celoΦφseln²mi datov²mi typy.
  58.  
  59. P°φÜt∞
  60. P°φÜt∞ povφdßnφ o novinkßch v poslednφm standardu jazyka C dokonΦφme. Zb²vß nßm jeÜt∞ podφvat se zejmΘna na ukazatele, pole, funkce a makra. Ve struΦnosti si vÜimneme jeÜt∞ takΘ zm∞n ve standardnφ knihovn∞.
  61.  
  62. Miroslav Virius, autor@chip.cz
  63.  
  64. Reßlnß Φφsla v poΦφtaΦi
  65. Podφvejme se krßtce, jak se v poΦφtaΦi obvykle zobrazujφ reßlnß Φφsla. Vyjdeme od zßpisu, kter² pou₧φvßme pro velmi velkß nebo velmi malß Φφsla, nap°. x = 2,654 x 1014. ╚ßst 2,654 oznaΦφme jako mantisu, Φφslo 14 jako (desφtkov²) exponent. TakovΘto vyjßd°enφ ovÜem nenφ jedinΘ mo₧nΘ - totΘ₧ Φφslo lze vyjßd°it °adou r∙zn²ch zßpis∙. Nap°φklad uvedenΘ Φφslo x lze zapsat takΘ jako 26,54 x 1013 nebo 0,2654 x 1015 atd. Proto se pou₧φvß jeÜt∞ dodateΦnß podmφnka, ₧e mantisa m nenulovΘho Φφsla musφ le₧et nap°. v rozmezφ 1 [163] m < z, kde z je zßklad ΦφselnΘ soustavy. (Stejn∞ dob°e by bylo mo₧nΘ pou₧φt podmφnku z-1 [163] m < 1.) ╚φslo v tomto tvaru oznaΦujeme jako normalizovanΘ. Podobn² zßpis, ovÜem zalo₧en² na dvojkovΘ soustav∞, je zßkladem zobrazenφ reßln²ch Φφsel v poΦφtaΦi. Vezmeme-li nenulovΘ Φφslo y a zapφÜeme-li ho ve dvojkovΘ soustav∞ v normalizovanΘm tvaru, nap°. y = 1,00111 x 210011, vidφme, ₧e staΦφ uklßdat mantisu jako celΘ Φφslo (tj. bez °ßdovΘ Φßrky, nebo¥ ta je v₧dy na stejnΘm mφst∞) a exponent. Ve skuteΦnosti je skupina bajt∙ slou₧φcφch k ulo₧enφ reßlnΘho Φφsla zpravidla rozd∞lena na t°i pole. V prvnφm, jednobitovΘm, se uklßdß znamΘnko mantisy, v dalÜφch absolutnφ hodnota mantisy a exponent, zpravidla zv∞tÜen² o n∞jakou konstantu (tzv. posunutφ) umo₧≥ujφcφ vyjßd°it zßpornΘ znamΘnko jeÜt∞ v oblasti kladn²ch hodnot - viz dßle. Je jasnΘ, ₧e Üφ°ka (poΦet bit∙) mantisy urΦuje p°esnost (poΦet platn²ch cifer), Üφ°ka exponentu urΦuje °ßd nejv∞tÜφho a nejmenÜφho Φφsla, kterΘ lze zobrazit. Jeden bit mantisy lze n∞kdy uÜet°it a tak zv∞tÜit p°esnost: nenulovΘ Φφslo v normalizovanΘm tvaru obsahuje v₧dy p°ed °ßdovou Φßrkou Φφslici 1, a proto ji nenφ t°eba uklßdat. Ne v₧dy se to vÜak pou₧φvß; nap°. na PC se tΘto ·spory vyu₧φvß pro Φty°bajtovß a osmibajtovß reßlnß Φφsla ( je₧ odpovφdajφ typ∙m float a double), nikoli vÜak pro 10bajtovß reßlnß Φφsla, kterß v n∞kter²ch implementacφch odpovφdajφ typu long double. Obsahuje-li znamΘnkovß Φßst, mantisa a exponent po °ad∞ hodnoty s, m a e, m∙₧e pak b²t hodnota ulo₧enΘho nenulovΘho Φφsla vyjßd°ena zßpisem (-1)s x 1,m x 2e-q, kde q je posunutφ (bias). P°itom 1,m p°edstavuje Φφslo, kterΘ vznikne zßpisem jedniΦky, za nφ₧ nßsleduje °ßdovß Φßrka a potΘ bity mantisy. Posunutφ q se volφ tak, aby byly vÜechny hodnoty e kladnΘ. To umo₧≥uje vyhradit n∞kterΘ hodnoty exponentu pro zvlßÜtnφ ·Φely nap°. pro zobrazenφ 0, nekoneΦna nebo hodnoty oznaΦovanΘ NaN, o nich₧ si povφme dßle. Je jasnΘ, ₧e v poΦφtaΦi lze zobrazit pouze koneΦnou podmno₧inu mno₧iny reßln²ch Φφsel. ╚φsla, kterß nelze zobrazit, jsou bu∩ p°φliÜ velkß, nebo le₧φ mezi hodnotami, kterΘ zobrazit lze. V prvnφm p°φpad∞ dojde k p°eteΦenφ, ve druhΘm p°φpad∞ se Φφslo n∞jak²m zp∙sobem zaokrouhlφ na jednu ze sousednφch zobraziteln²ch hodnot. (Nemusφ to b²t nejbli₧Üφ; Φasto lze volit, zda se mß zaokrouhlovat sm∞rem k nejbli₧Üφmu Φφslu, sm∞rem k nule, sm∞rem k plus nebo minus nekoneΦnu atd.)
  66.  
  67. NekoneΦno
  68. Standard IEC 60559 urΦuje, ₧e jednou z mo₧n²ch hodnot, kterΘ lze zobrazit, mß b²t i kladnΘ a zßpornΘ nekoneΦno; vznikne nap°. jako v²sledek d∞lenφ nenulovΘho Φφsla nulou. Platφ, ₧e +nekoneΦno je v∞tÜφ ne₧ jakΘkoli jinΘ reßlnΘ Φφslo; p°iΦtenφm koneΦnΘho Φφsla k nekoneΦnu dostaneme op∞t nekoneΦno atd. S nekoneΦnem lze tedy do jistΘ mφry poΦφtat podobn∞ jako s "obyΦejn²mi" Φφsly; operace nekoneΦno - nekoneΦno, +nekoneΦno x 0 a nekoneΦno/nekoneΦno ovÜem nemajφ smysl.
  69.  
  70. NaN
  71. DalÜφ ze zvlßÜtnφch hodnot, kterΘ by m∞ly b²t reprezentovatelnΘ v reßln²ch Φφslech, je tzv. NaN. Toto oznaΦenφ vzniklo jako zkratka pro Not a Number, tedy n∞co, co nenφ Φφslo. NaN vznikne jako v²sledek operacφ, kterΘ nemajφ smysl - nap°. p°i nßsobenφ +nekoneΦno x 0.
  72. Standard IEC 60559 rozliÜuje tich² (quiet) a signalizujφcφ (signaling) NaN. Tich² NaN p°edstavuje mo₧n² v²sledek, signalizujφcφ NaN zp∙sobφ v²jimku (tedy typicky p°eruÜenφ v²poΦtu a ohlßÜenφ chyby).
  73.  
  74. Denormßlnφ Φφsla
  75. M∙₧e se stßt, ₧e v²sledek aritmetickΘ operace nebude nulov², bude ale mφt tak malou absolutnφ hodnotu, ₧e ho nep∙jde v danΘm datovΘm typu vyjßd°it v normalizovanΘm tvaru. N∞kterΘ architektury poΦφtaΦ∙ umo₧≥ujφ pracovat i s takov²mito denormßlnφmi Φφsly (tj. nezaokrouhlφ je na 0 nebo na nejmenÜφ nenulovΘ zobrazitelnΘ Φφslo). Denormßlnφ Φφsla jsou ovÜem mΘn∞ p°esnß, tj. majφ menÜφ poΦet platn²ch cifer ne₧ normalizovanß Φφsla.
  76.  
  77. V²jimky
  78. N∞kterΘ operace nebo jejich v²sledky mohou zp∙sobit v²jimky procesoru. Jde nap°. o d∞lenφ nulou, vznik denormßlnφho Φφsla, vznik signalizujφcφho NaN atd. To m∙₧e, ale nemusφ znamenat p°eruÜenφ v²poΦtu - zßle₧φ na nastavenφ v²poΦetnφho prost°edφ (floating point execution environment).
  79.  
  80. V²poΦetnφ prost°edφ
  81. Pod tφmto abstraktnφm oznaΦenφm se skr²vajφ mechanismy, kterΘ umo₧≥ujφ ovliv≥ovat chovßnφ procesoru p°i v²poΦtech - nap°. sm∞r zaokrouhlovßnφ, zp∙sob reakce na n∞kterΘ v²jimky atd. Znßte-li architekturu PC, m∙₧ete si pod tφmto oznaΦenφm p°edstavit analogie °φdicφho a stavovΘho slova matematickΘho koprocesoru.
  82.  
  83.  
  84.  
  85.