Hodnotové typy
2. Hodnotové typy
2.3. Reálná čísla
Další skupinou hodnotových typů jsou reálná čísla. Kromě označení reálná čísla se také často používá termín „desetinná čísla“, nebo „čísla s plovoucí řádovou čárkou“. Reálné číslo se zobrazuje v tzv. semilogaritmickém tvaru nebo též jako číslo s pohyblivou řádovou čárkou - viz Obrázek 1.
kde:
-
x ... zobrazované číslo
-
M ... mantisa v normalizovaném tvaru <0.5,1)
-
z ... 2
-
E ... exponent <-128,127>

Obrázek 1: Zobrazení reálného čísla
V následující tabulce jsou uvedeny datové typy, které může zvolit pro reálná čísla – viz Tabulka 1. Tabulka datových typů oproti celým číslům obsahuje také přesnost, která určuje počet desetinných míst, na které je možné ukládat hodnoty.
|
Datový typ |
Velikost (počet bytů) |
Rozsah |
Přesnost (počet číslic) |
Přípona (literál) |
|
float |
4 |
±1.5*10−45 ÷ ±3.4*1038 |
~6÷9 |
f nebo F |
|
double |
8 |
±5.0*10−324 ÷ ±1.7*10308 |
~15÷17 |
d nebo D |
|
decimal |
16 |
±1.0*10-28 ÷ ±7.9228*1028 |
28÷29 |
m nebo M |
Tabulka 1: Datové typy reálných čísel
Ilustrativní příklad RelnaCislaLiteral
Program RealnaCislaLiteral
- Popis: Příklad deklarace reálného čísla typu double a float s inicializací a použitím literálu
- Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem doublePromenna datového typu double a inicializujte ji hodnotou 0.42 s použitím přípony u literálu daného typu. Dále deklarujte další proměnnou s názvem doublePromenna také datového typu double a inicializujte ji stejnou hodnotou, nyní však bez použití literálu.
To samé proveďte pro proměnné floatPromenna a floatPromenna2 datového typu float - Řešení: Bude postupně probráno v následujícím textu
U datového typu double nemusí být uváděna přípona literálu – viz Kód 1. Všimněte si, že namísto české desetinné čárky musíme použít desetinnou tečku.
U poslední případu deklarace typu float, kdy jsme nepoužili literál nám překladač zahlásil: "Literály typu double nelze implicitně převést na typ float. Chcete-li vytvořit literál tohoto typu, použijte předponu F".
Pamatujte, že F je přípona datového typu float určující, že např. hodnota 0.42 by měla být považováno za datový typ float. Pokud zapomeneme napsat příponu F, bude hodnota 0.42 považována za typ double a náš program se nezkompiluje (neproběhne překlad), protože nemůžeme přiřadit hodnotu jednoho typu k proměnné jiného typu bez přidání dalšího kódu (přetypování). C # je v tomto ohledu velmi přísný. [6]
static void Main(string[] args) { <span style="color: green;">//Deklarace proměnné pro uložení reálných čísel - typ double</span> <span style="color: blue;">double</span> <span style="color: #1f377f;">doublePromenna</span> = 0.42D; <span style="color: green;">//Deklarace proměnné typu double - bez uvedení přípony u literálu</span> <span style="color: blue;">double</span> <span style="color: #1f377f;">doublePromenna2</span> = 0.42; <span style="color: green;">//Deklarace proměnné pro uložení reálných čísel - typ float </span> <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna</span> = 0.42F; <span style="color: green;">//Deklarace proměnné typu float - nelze bez uvedení přípony u literálu -> K.O.</span> <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna2</span> = 0.42; }
Kód 1: Příklad deklarace reálné proměnné s použitím přípony u literálu
U desetinných čísel se může při výpočtech stát, že hodnoty mohou být zaokrouhleny nebo mohou být provedeny jiné aproximace (vzpomeňte si na příklad, který ilustroval nepřesné zobrazení reálných čísel v závislosti na datový typech). Pokud tedy potřebujeme zachovat vyšší přesnost, měli bychom použít příponu M aby hodnota zůstala v typu decimal. Typ decimal je využíván zejména pro bankovnictví díky své velké přesnosti.
Ilustrativní příklad FloatLiteral
Program FloatLiteral
- Popis: Příklad deklarace reálného čísla typu float s inicializací a použitím literálu
- Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem floatPromenna datového typu float a inicializujte ji hodnotou 0.42 zadanou v semilogaritmickém tvaru. Hodnotu v proměnné vypište
- Řešení: Bude postupně probráno v následujícím textu
Prvním způsobem, kterým jsme použili pro zápis desetinného čísla je za použití desetinné tečky. Hodnotu reálného čísla lze také zapsat za pomoci tzv. semilogaritmického tvaru např. 0.42 = 42*10-2 = 42e-2 – viz Kód 2. Jak již z předchozího příkladu víme, u hodnoty přiřazované proměnné typu float musíme použít literál.
static void Main(string[] args) { <span style="color: green;">//Deklarace proměnné typ float - semilogaritmický tvar</span> <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna</span> = 42e-2F; <span style="color: green;">//Výpis hodnoty proměnné</span> <span style="color: #2b91af;">Console</span>.<span style="color: #74531f;">WriteLine</span>(<span style="color: #a31515;">"floatPromenna: {0}", floatPromenna); //Čekání na stisk klávesy -> Ukončení programu Console.ReadKey(); }
Kód 2: Příklad deklarace reálné proměnné typu float a její inicializace s použitím semilogaritmického tvaru
Ve výstupu např. výpis výsledků početní operace se reálná čísla formátují podle místních zvyklostí, tzn., že pokud je na v operačním systému nastavena česká lokalizace, tak se vypíše česká desetinná čárka, namísto americké desetinné tečky. To samé platí i pro vstup, tj. zadávání reálného čísla jako vstup do programu, budeme zadávat číslo s desetinnou čárkou.
floatPromenna: 0,42
Výstup programu - Kód 2: Výpis reálného čísla zadaného v semilogaritmickém tvaru
