Datové typy pro reálná čísla



Podobné dokumenty
Datové typy pro reálná čísla

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Proměnná a její uložení v paměti

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Y36SAP - aritmetika. Osnova

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

IUJCE 07/08 Přednáška č. 1

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Úvod do programování. Lekce 1

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Racionální čísla, operátory, výrazy, knihovní funkce

Jazyk C++, některá rozšíření oproti C

Datové proudy objektový vstup a výstup v C++

Racionální čísla, operátory, výrazy, knihovní funkce

Vstupní a vstupní proudy v C++

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Algoritmy a datové struktury

PROGRAMOVÁNÍ V C++ CVIČENÍ

Algoritmizace a programování

přetížení operátorů (o)

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Programovací jazyk C++ Cvičení 2

8. Načítání a zápis PDB souboru

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

FORMÁTOVÁNÍ ODSTAVCE

Výrazy, operace, příkazy

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Architektury počítačů

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Teoretické minimum z PJV

Operátory. Základy programování 1 Tomáš Kühr

Vstupy a výstupy v jazyce C++

Zápis programu v jazyce C#

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Množina čísel int stl-set-int.cpp

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Jazyk C# a platforma.net

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

8. Posloupnosti, vektory a matice

C++ objektově orientovaná nadstavba programovacího jazyka C

Výrazy, operace, příkazy

Algoritmizace a programování

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Formátové specifikace formátovací řetězce

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

Algoritmizace a programování

Algoritmizace a programování

Standardní algoritmy v C++.

5 Přehled operátorů, příkazy, přetypování

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Základy jazyka C. Základy programování 1 Tomáš Kühr

Data, výrazy, příkazy

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Datové typy a jejich reprezentace v počítači.

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Základní ovládání aplikace

Spinelterminal. Terminálový program pro ladění aplikací s protokolem Spinel. 20. září 2005 w w w. p a p o u c h. c o m v

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Struktura a architektura počítačů (BI-SAP) 6

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Programovací jazyk C++ Hodina 1

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Funkční objekty v C++.

Čísla a číselné soustavy.

Tematická oblast: Programování 1 (VY_32_INOVACE_08_1_PR) Anotace: Využití ve výuce: Použité zdroje:

Programovací jazyk Pascal

Operační systémy. Cvičení 3: Programování v C pod Unixem

Zpracoval:

Část 1 Struktury a uniony Struktury struct Proměnné se sdílenou pamětí union Příklad

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 33 PRŮVODCE VKLÁDÁNÍ MODELŮ ZE 3D]

Struktury a uniony, přesnost výpočtů a vnitřní reprezentace číselných typů

Struktury a uniony, přesnost výpočtů a vnitřní reprezentace číselných typů

Exponent. Integer 4 bajty až Double Integer 8 bajtů až

Paměť počítače. alg2 1

Číslicový otáčkoměr TD 5.1 AS

EGMedical, s r. o. IRC čítač

Úloha 1 Spojte binární obrazy na obrázku s hodnotami, které reprezentují.

David Matoušek. C++ bez předchozích znalostí

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Transkript:

Datové typy pro reálná čísla V kapitole 2 jsme se seznámili s celočíselnými datovými typy. Pro uložení číselných hodnot ve velkém rozsahu obvykle nepožadujeme tak velkou přesnost, jakou nám poskytují celá čísla. Obvykle vystačíme s přesností například 6 desítkových číslic. KAPITOLA 3 V této kapitole: Vlastnosti datových typů pro reálná čísla Vstupně/výstupní operace z pohledu reálných čísel Aritmetické operace s reálnými čísly Implicitní a explicitní typové konverze Priorita a asociativita dosud probraných operátorů Pro reprezentaci reálných čísel pak používáme datové typy obecně označované jako čísla v plovoucí řádové čárce (anglicky float-point). Takové číslo je reprezentováno dvěma složkami: mantisou a exponentem. Mantisa (M) je hodnota čísla, exponent (E) určuje řád. Viz tento předpis (pro desítkovou soustavu): reálné číslo = M 10 E Příklady zápisů čísel v tomto formátu: 1,602 10-19 (elementární náboj); 6,023 10 23 (Avogadrova konstanta). Vlastnosti datových typů pro reálná čísla K dispozici jsou celkem tři typy: float, double a long double, které se liší oborem hodnot. Tyto typy se také liší velikostí v bajtech a přesností, která je určena počtem platných cifer (číslic). Formát zápisu reálných literálů v desetinném tvaru se vyznačuje používáním tečky místo obvyklé desetinné čárky, například: 1.2345. Reálné literály lze také zapisovat v semilogaritmickém tvaru, například: 1.602E-19. 47

KAPITOLA 3 Datové typy pro reálná čísla Tabulka 3.1. Vlastnosti datových typů pro reálná čísla Typ float velikost: 4 bajty, přesnost: 6 platných desítkových cifer double velikost: 8 bajtů, přesnost: 15 platných desítkových cifer long double velikost: 16 bajtů, přesnost: 18 platných desítkových cifer Přibližný obor hodnot ±1,2 10 38 až ±3,4 10 +38 ±2,2 10 308 až ±1,8 10 +308 ±3,4 10 4932 až ±1,2 10 +4932 Přesné charakteristiky těchto datových typů lze získat pomocí symbolů z hlavičkového souboru FLOAT.H. Níže je doplněn krátký program, který pro každý z uvedených typů vypíše postupně: velikost v bajtech, počet platných desítkových číslic, minimální a maximální hodnotu. Můžete tyto údaje porovnat s tabulkou 3.1. #include <iostream> #include <float.h> using namespace std; int main(int argc, char** argv) { cout<< sizeof(float)= <<sizeof(float)<<endl; cout<< FLT_DIG= <<FLT_DIG<<endl; cout<< FLT_MIN= <<FLT_MIN<<endl; cout<< FLT_MAX= <<FLT_MAX<<endl; cout<< sizeof(double)= <<sizeof(double)<<endl; cout<< DBL_DIG= <<DBL_DIG<<endl; cout<< DBL_MIN= <<DBL_MIN<<endl; cout<< DBL_MAX= <<DBL_MAX<<endl; cout<< sizeof(long double)= <<sizeof(long double)<<endl; cout<< LDBL_DIG= <<LDBL_DIG<<endl; cout<< LDBL_MIN= <<LDBL_MIN<<endl; cout<< LDBL_MAX= <<LDBL_MAX<<endl; return 0; } PROG_01: 48

Vstupně/výstupní operace z pohledu reálných čísel Výpis programu v konzoli: sizeof(float)=4 FLT_DIG=6 FLT_MIN=1.17549e-038 FLT_MAX=3.40282e+038 sizeof(double)=8 DBL_DIG=15 DBL_MIN=2.22507e-308 DBL_MAX=1.79769e+308 sizeof(long double)=16 LDBL_DIG=18 LDBL_MIN=3.3621e-4932 LDBL_MAX=1.18973e+4932 Vstupně/výstupní operace z pohledu reálných čísel Informace ke vstupně/výstupním operacím z kapitoly 2 můžeme nyní doplnit o přehled dalších manipulátorů a rozšířit informacemi, které platí pro reálná čísla. Při výpisu hodnoty můžeme nastavit parametry, které určí, jak přesně výpis proběhne: šířka určuje minimální počet znaků, které se mají vypsat. Uvažujme například výpis čísla 56 na 5 míst. V tomto případě je třeba přidat další 3 znaky, aby celková šířka výpisu byla 5 znaků. Znak, který se použije jako výplň, je obvykle mezera (je možné jej ale změnit pomocí parametru výplňový znak). Pokud uvažujeme výpis čísla 56 v šířce 0, vypíše se prostě 56 (výpis hodnoty nesmí být zkreslen). přesnost určuje počet číslic za desetinnou tečkou, které se zobrazí. Například výpis čísla π (3,14159265 ) při šířce 5 a přesnosti 3 vypadá takto: 3.142 (při výpisu probíhá nezbytné zaokrouhlení); platí pro formáty fixed a scientific. výplňový znak určuje znak, který se použije jako výplň při výpisu hodnoty ve větší šířce, jako výchozí výplňový znak je použita mezera. zarovnávání určuje způsob zarovnání výpisu hodnoty a místo, kam se budou vkládat výplňové znaky. Rozlišujeme (uvažujme výpis čísla -1 při šířce 5): zarovnání doleva (left) výpis hodnoty je zarovnán doleva, výplň se vkládá zprava: -1, zarovnání doprava (right) výpis hodnoty je zarovnán doprava, výplň se vkládá zleva: -1, mezi znaménko a hodnotu (internal) výpis znaménka je vlevo, následují výplňové znaky a nakonec vypisovaná hodnota: -1. 49

KAPITOLA 3 Datové typy pro reálná čísla Přehled běžně používaných manipulátorů pro výpis uvádí tabulka 3.2. Na začátku jsou připomenuty dříve popsané manipulátory endl, dec, oct a hex. Tabulka 3.2. Přehled manipulátorů Manipulátor Použitelnost pro čísla Význam endl ukončí řádek a nastaví kurzor na začátek následujícího řádku dec celá přepne zobrazení celých čísel do desítkové soustavy oct celá přepne zobrazení celých čísel do osmičkové soustavy hex celá přepne zobrazení celých čísel do šestnáctkové soustavy showpos zajistí zobrazení znaménka i pro nezáporná čísla (kladná čísla včetně nuly) noshowpos vypne zobrazení znaménka pro kladná čísla (znaménko se zobrazuje pouze pro záporná čísla) left přepne na zarovnávání doleva (výplň zprava) right přepne na zarovnávání doprava (výplň zleva) internal přepne na vyplnění mezi znaménkem a hodnotou fixed reálná přepne výpis reálných čísel do tvaru s pevnou pozicí desetinné tečky scientific reálná přepne výpis reálných čísel do exponenciálního tvaru uppercase nouppercase setw(w) setfill(f) setprecision(p) reálná přepne výpis čísel tak, že znaky se zobrazují jako velká písmena (týká se výpisu celých čísel v šestnáctkové soustavě a reálných čísel v exponenciálním tvaru) přepne výpis čísel tak, že znaky se zobrazují jako malá písmena (týká se výpisu celých čísel v šestnáctkové soustavě a reálných čísel v exponenciálním tvaru) nastaví šířku následujícího výpisu dle w, chybějící znaky do požadovaného počtu jsou realizovány zvolenou výplní (pokud zadání šířky nezopakujeme před každým výpisem, bude mít následující výpis opět šířku 0) nastaví výplňový znak na f (znakové literáry píšeme mezi apostrofy) nastaví výpis reálných čísel na počet desetinných míst daných p Poslední tři manipulátory jsou parametrické (jsou řízeny parametrem zapsaným v závorkách). Pro použití těchto manipulátorů je nutné do zdrojového textu vložit hlavičkový soubor iomanip: #include <iomanip> Pro lepší pochopení připojujeme několik příkladů použití výše popsaných manipulátorů pomocí tabulky 3.3. 50

Aritmetické operace s reálnými čísly Tabulka 3.3. Příklady formátování výpisu Příklad Výpis Vysvětlení cout<<56; 56 normální výpis kladné hodnoty (bez znaménka +) cout<<-56; -56 výpis záporné hodnoty musí vždy obsahovat znaménko cout<<showpos<<56; +56 výpis kladné hodnoty včetně znaménka cout<<setw(5)<<left<<-56; -56 šířka 5, zarovnání doleva: po výpisu čísla se připojí 2 mezery cout<<setw(5)<<right<<-56; -56 šířka 5, zarovnání doprava: před výpisem čísla se vloží 2 mezery cout<<setw(5)<<internal<<-56; - 56 šířka 5, zarovnání mezi: mezi znaménko a číslice se vloží 2 mezery cout<<fixed 3.141519 výpis reálného čísla v desetinném tvaru cout<<fixed<<setprecision(3) 3.142 zobrazí se 3 číslice za desetinnou tečkou (+zaokrouhlení) cout<<scientific<<setprecision(3) 3.142e+000 výpis v exponenciálním tvaru, zobrazí se 3 číslice za desetinnou tečkou (+zaokrouhlení) cout<<setw(10)<<left<<setfill( 0 ) <<fixed<<setprecision(3) 3.14200000 výpis v desetinném tvaru, 3 platné číslice za desetinnou tečkou, zbytek se doplní nulami do celkové šíře 10 znaků (zarovnání doleva) cout<<setw(10)<<right<<setfill( 0 ) <<fixed<<setprecision(3) 000003.142 výpis v desetinném tvaru, 3 platné číslice za desetinnou tečkou, vlastní výpis předchází nuly do celkové šíře 10 znaků (zarovnání doprava) Aritmetické operace s reálnými čísly Pro reálná čísla lze používat běžné aritmetické operátory stejné jako pro celá čísla. Jsou zde však dva drobné rozdíly: 1. Operátor % (modulo, zbytek po celočíselném dělení) nemá pro aritmetiku reálných čísel smysl, jeho použití s reálným číslem je chápáno jako chyba. 2. Operátor / (dělení) má v reálné aritmetice smysl reálného dělení, tedy například výraz 5.0/2.0 má výsledek 2,5. Přehled operátorů použitelných pro reálná čísla je uveden v tabulkách 3.4 a 3.5. V tabulce 3.4 jsou běžné binární operátory (mají levý a pravý operand), v tabulce 3.5 jsou unární operátory (mají pouze jeden operand). 51