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

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

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

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

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

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných

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

Datové typy pro reálná čísla

Datové typy pro reálná čísla

Úvod do programování. Lekce 1

Algoritmizace a programování

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

C2115 Praktický úvod do superpočítání

Floating Point. Jak je reprezentovaný a proč někdy nefunguje. 2. června 2013

Čísla a číselné soustavy.

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

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

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

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

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

1. Chyby vstupních dat metody převedení úlohy na numerickou (řád použité metody) zaokrouhlovací reprezentace čísel v počítači

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

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

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

Úvod do programování. Lekce 3

7. Datové typy v Javě

Algoritmizace a programování

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Algoritmy a datové struktury

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

Jazyk C# a platforma.net

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

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

v aritmetické jednotce počíta

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

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

Architektury počítačů

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

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

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

ADT/ADS = abstraktní datové typy / struktury

3 Jednoduché datové typy Interpretace čísel v paměti počítače Problémy s matematickými operacemi 5

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

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

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

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

Informatika Datové formáty

Y36SAP - aritmetika. Osnova

Úvod do programovacích jazyků (Java)

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

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

Principy počítačů I Reprezentace dat

Teoretické minimum z PJV

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

Úvod do programování 7. hodina

Programování v C++ 3, 3. cvičení

PB002 Základy informačních technologií

Algoritmizace a programování

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

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

NPRG030 Programování I, 2018/19 1 / :25:37

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Programovací jazyk Pascal

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Zápis programu v jazyce C#

UMÍ POČÍTAČE POČÍTAT?

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

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

Základy programování (IZP)

Algoritmizace a programování. Terminálový vstup a výstup

Mikroprocesorová technika (BMPT)

Poslední nenulová číslice faktoriálu

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Fz =a z + a z +...+a z +a z =

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Základy programování (IZP)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

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

Algoritmizace prostorových úloh

Číselné soustavy. Binární číselná soustava

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

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

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

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

3 KTE / ZPE Informační technologie

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Elementární datové typy

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Maturitní otázky z předmětu PROGRAMOVÁNÍ

2 Datové typy v jazyce C

LEKCE 6. Operátory. V této lekci najdete:

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Programování v jazyce JavaScript

PŘEDNÁŠKA KURZU BPC2A

Transkript:

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

Reprezentace reálnách čísel v počítači Reálná čísla jsou v počítači reprezentována jako čísla tvaru ±x b e, kde b je číselná soustava (u počítačů dvojková), číslo x se nazývá mantisa a nabývá hodnot mezi 1 až b a e je exponent (v desítkové soustavě by číslo vypadalo např.: 1.45 10 5, 8.278 10-12 ) Hodnoty reálných čísel jsou v počítači reprezentovány určitým počtem bitů, které jsou rozděleny do třech kategorií: znaménko, exponent a mantisa Hodnoty mohou nabývat pouze určité velikosti, která je dána počtem bitů použitých pro uložení hodnoty v paměti: float 32 bit 3.4 * 10-38 až 3.4 * 10 38 7 deset. míst double 64 bit 1.7 * 10-308 až 1.7 * 10 308 15 deset. míst Reprezentace hodnoty typu float v počítači (celkem 32 bitů): 1 0 0 0 0 1 1 0 1 1 0 0 0 0 11 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 Znaménko + - (1 bit) exponent (8 bitů) mantisa (23 bitů) 2

Přesnost výpočtů Reálná čísla jsou v počítači uložena s omezenou přesností, která je dána počtem bitů použitým pro kódování čísla Čísla typu double mají větší přesnost než float, proto jsou přednostně používány pro numericky náročné výpočty //Program provede n krat //odmocneni a pak n krat //umocneni int i = 0; int n = 60; float a = 100.0; for (i = 0; i < n; i++) a = sqrt(a); for (i = 0; i < n; i++) a = a*a; printf("%f\n", a); 0 10.0000000 1 3.1622777... 5 1.0746078... 10 1.0022511... 15 1.0000702... 20 1.0000021 21 1.0000010 22 1.0000004 23 1.0000002 24 1.0000001 25 1.0000000 100 80 60 40 20 0 float double 0 10 20 30 40 50 60 Počet cyklů n 3

Hodnoty inf, -inf, nan Při aritmetických operacích s reálnými čísly může být výsledkem hodnota, která je vyšší než maximální hodnota pro danou proměnnou (což je např. 1.7 10 308 pro čísla typu double) V takovém případě je do proměnné uložena speciální sekvence bitů, která reprezentuje nekonečno nebo záporné nekonečno Při výpisu této hodnoty pomocí funkce printf() se na obrazovky místo čísla vypíše text: inf nebo -inf (některé programovací jazyky mohou používat výpisy: 'infinity', 'INF', 'INFINITY', atd.) Není-li výsledek aritmetické operace definován (např. sqrt( 1), log( 1) ) uloží se do výsledné proměnné sekvence reprezentující nečíselnou hodnotu (angl. not a number, zkracuje se NaN) Při výpisu této hodnoty pomocí funkce printf() se na obrazovky místo čísla vypíše text: nan (některé programovací jazyky mohou používat výpisy: 'NAN', 'NaN', 'NaN%', 'NaNQ', 'NaNS', 'qnan'. 'snan', '1.#SNAN', atd.) 4

Reprezentace celých čísel, integer overflow Celočíselné proměnné mají omezený rozsah, pro 32-bitové číslo typu int je rozsah hodnot: -2 147 483 648 až 2 147 483 647 Při překročení maximální hodnoty dochází ke změně bitu reprezentující znaménko a kladné číslo se tak změní na záporné (a opačně) tento stav se nazývá anglicky integer overflow Znaménko + - (1 bit) Reprezentace hodnoty typu int v počítači (celkem 32 bitů): 1 0 0 0 0 1 1 0 1 1 0 0 0 0 11 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 číslo (31 bitů) a = 1 a + 1 = 2 a + 2 = 3 a = 2 147 483 646 a + 1 = 2 147 483 647 a + 2 = -2 147 483 648 a + 3 = -2 147 483 647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 5

Celá čísla Ke vzniku integer overflow může snadno dojít např. při násobení, kdy vynásobení relativně malých čísel poskytuje velká čísla Příklad (operace prováděny s 32-bit hodnotani typu int): Násobení výsledek správná hodnota 10000 * 10000 = 100000000 100000000 20000 * 20000 = 400000000 400000000 30000 * 30000 = 900000000 900000000 40000 * 40000 = 1600000000 1600000000 50000 * 50000 = 1794967296 2500000000 60000 * 60000 = 694967296 3600000000 70000 * 70000 = 605032704 4900000000 80000 * 80000 = 2105032704 6400000000 90000 * 90000 = 489934592 8100000000 Integer overflow 6

Pomocná makra a funkce V jazyce C jsou definovány symbolické konstanty (makra) pro zjištění maximálních hodnot pro dané typy: INT_MIN, INT_MAX obsahují nejnižší a nejvyšší možnou hodnotu čísel typu int (je třeba vložit hlavičkový soubor limits.h) FLT_MAX, DBL_MAX obsahují nejvyšší možnou hodnotu čísel typu float a double (je třeba vložit hlavičkový soubor float.h) Funkce isnan() a isinf() zjišují, zda-li je daná hodnota NaN nebo nekonečno (inf, -inf) (je třeba vložit hlavičkový soubor math.h) Vice informací na: http://en.wikipedia.org/wiki/limits.h http://en.wikipedia.org/wiki/float.h Unixový manuál: man isnan, man isinf 7

Nejdražší počítačová chyba Havárie 1. startu rakety Ariane 5 (4. června 1996) Chyba v navigačním softwaru: při konverzi z reálné 64-bitové hodnoty do 16-bit celočíselné byla hodnota větší než je maximální hodnota pro danou celočísenou proměnnou, což vedlo k selhání řídícího počítače Záložní počítač selhal ve stejném okamžiku v důsledku stejné softwarové chyby Použitý software byl původně vyvinut pro starší raketu Ariane 4, která měla nižší výkon a hodnoty zpracovávané softwarem byly nižší Ke zničení rakety došlo 37 sekund po startu Více na: http://en.wikipedia.org/wiki/ariane_5_flight_501 http://en.wikipedia.org/wiki/list_of_software_bugs 8

Objektové programování class Atom { public: Atom(); void readline(const string &line, int linenumber); void writeline(ofstream &ofile); void print() const; string getresiduename() const; int getresiduenumber() const; private: int atomnumber; string atomname; char alternatelocation; string residuename; }; void Atom::writeLine(ofstream &ofile) { ofile << "ATOM "; ofile << right << setw(5) << atomnumber; ofile << left << setw(4) << atomname; ofile << right << setw(4) << residuenumber; ofile << right << fixed << setprecision(3); ofile << setw(8) << coordx; } 9

Kurz Pokročilé programování v jazyce C pro chemiky C3220 Základy objektového programování v C++ Formátovaný vstup a výstup na obrazovku a do souboru Načtení a zápis PDB souboru Základy návrhu interaktivních grafických programů s knihovnou Qt 10