Sdílet prostřednictvím


Float – typ

Čísla s plovoucí desetinou čárkou používají formát IEEE (Institute of Electrical and Electronics Engineers). Hodnoty s jednoduchou přesností typu float mají 4 bajty, které se skládají z znaménka, 8bitového nadbytečného binárního exponentu 127 a 23bitové mantisy. Mantisa představuje číslo v rozmezí od 1,0 do 2,0. Vzhledem k tomu, že bit manissa s vysokým pořadím je vždy 1, není uložen v čísle. Tato reprezentace poskytuje rozsah přibližně 3,4E-38 až 3,4E+38 pro typ float.

Proměnné můžete deklarovat jako plovoucí nebo dvojité v závislosti na potřebách vaší aplikace. Hlavní rozdíly mezi těmito dvěma typy jsou významnost, kterou mohou představovat, úložiště, které vyžadují, a jejich rozsah. Následující tabulka ukazuje vztah mezi významností a požadavky na úložiště.

Typy s plovoucí desetinou čárkou

Typ Významné číslice Počet bajtů
float (číslo s plovoucí řádovou čárkou) 6 - 7 4
double 15 - 16 8

Proměnné s plovoucí desetinnou čárkou jsou reprezentovány mantisou, která obsahuje hodnotu čísla, a exponent, který obsahuje řád čísla.

Následující tabulka uvádí počet bitů přidělených mantisce a exponent pro každý typ s plovoucí desetinnou čárkou. Nejvýznamnější bit libovolné plovoucí nebo dvojité hodnoty je vždy znaménkový bit. Pokud je číslo 1, považuje se za záporné; jinak se považuje za kladné číslo.

Délky exponentů a mantisů

Typ Délka exponentu Délka mantisy
float (číslo s plovoucí řádovou čárkou) 8 bitů 23 bitů
double 11 bitů 52 bitů

Protože exponenty jsou uloženy v nepodepsané podobě, exponent je zkreslený o polovinu jeho možné hodnoty. Pro typ float je odchylka 127; pro typ double je 1023. Skutečnou exponentní hodnotu můžete vypočítat odečtením hodnoty zkreslení od exponentní hodnoty.

Mantisa je uložena jako binární zlomek větší nebo roven 1 a menší než 2. U typů float a double existuje implicitní vedoucí 1 v mantisisce v nejvýznamnější bitové pozici, takže manissasy jsou ve skutečnosti 24 a 53 bitů dlouhé, v uvedeném pořadí, i když nejvýznamnější bit není nikdy uložen v paměti.

Místo právě popsané metody úložiště může balíček s plovoucí desetinnou čárkou ukládat binární čísla s plovoucí desetinnou čárkou jako denormalizovaná čísla. Denormalizovaná čísla jsou nenulová čísla s plovoucí desetinnou čárkou s rezervovanými exponentovými hodnotami, ve kterých je nejvýznamnější bit mantisy 0. Pomocí denormalizovaného formátu je možné rozšířit rozsah čísla s plovoucí desetinnou čárkou za cenu přesnosti. Nelze určit, zda je číslo s plovoucí desetinnou čárkou reprezentováno v normalizované nebo denormalizované podobě; balíček s plovoucí desetinou čárkou určuje reprezentaci. Balíček s plovoucí desetinnou čárkou nikdy nepoužívá denormalizovaný formulář, pokud exponent nebude menší než minimum, které lze reprezentovat v normalizované podobě.

Následující tabulka uvádí minimální a maximální hodnoty, které můžete uložit do proměnných každého typu s plovoucí desetinou čárkou. Hodnoty uvedené v této tabulce se vztahují pouze na normalizovaná čísla s plovoucí desetinou čárkou; denormalizovaná čísla s plovoucí desetinnou čárkou mají menší minimální hodnotu. Všimněte si, že čísla zachovaná v registrech 80x87 jsou vždy reprezentována v 80bitové normalizované podobě. Čísla lze reprezentovat pouze v denormalizované podobě, pokud jsou uložena v 32bitových nebo 64bitových proměnných s plovoucí desetinnou čárkou (proměnné typu float a typu long).

Rozsah typů s plovoucí desetinou čárkou

Typ Minimální hodnota Maximální hodnota
float (číslo s plovoucí řádovou čárkou) 1.175494351 E - 38 3.402823466 E + 38
double 2.2250738585072014 E - 308 1.7976931348623158 E + 308

Pokud je přesnost menší než úložiště, zvažte použití typu float pro proměnné s plovoucí desetinnou čárkou. Naopak pokud je přesnost nejdůležitějším kritériem, použijte typ double.

Proměnné s plovoucí desetinou čárkou lze upřednostnět na typ větší významnosti (od typu float po typ double). K povýšení často dochází, když provádíte aritmetické proměnné s plovoucí desetinou čárkou. Tato aritmetika se vždy provádí ve vysoké míře přesnosti jako proměnná s nejvyšším stupněm přesnosti. Představte si například následující deklarace typu:

float f_short;
double f_long;
long double f_longer;

f_short = f_short * f_long;

V předchozím příkladu je proměnná f_short povýšena na typ double a vynásobeno ; f_longvýsledek se zaokrouhlí na typ float před přiřazením f_short.

V následujícím příkladu (který používá deklarace z předchozího příkladu) se aritmetika provádí s přesností float (32bitová) na proměnných; výsledek se pak upřednostní na typ double:

f_longer = f_short * f_short;

Viz také

Úložiště základních typů