Desatinné číselne typy premenných
Určite sa každý z nás stretol s desatinnými číslami. Tieto čísla je veľmi jednoduché reprezentovať v jazyku C++. Sú známe aj ako čísla s pohyblivou rádovou čiarkou. Poznáme dve spôsoby zápisu desatinných čísel v jazyku C++.
1. spôsob: klasický, ktorý sa každý z nás stretol napríklad 3.568 atď…
2. spôsob: menej známy a má tvár napríklad 5.25E5. Čo znamená, že čiarka sa pohne dopredu o 5 miest. V reči matematiky číslo sa násobí mocninou 10. V konkrétnom príklade 5.25E5 je 525000. Vo veľkosti písmena e/E nezáleží. Ďalšie tvary sú napríklad 5.25E+5 alebo 5.25e-5. Znamienká +/- sú pri tomto definovaní nepovinné. Ak chceme číslo 0.00254, tak ho zadefinujeme pomocou – (čiže delíme mocninou 10 a zapíšeme 2.54E-3. Alebo 25.4E-4 a pod…
Typy premenných float a double
Na reprezentáciu desatinných čísel v jazyku C++ používame typy premenných float a double. Rozdiel medzi float a double je v presností. Viac o presností sa dočítate v tabuľke.
Poďme na príklad:
1. príklad: Otestovanie rozsahu premenných typu float a double
#include <iostream> //hlavičkový súbor iostream using namespace std; //priestor mien int main() //hlavná funkcia main { float prem1 = 1.55E20; //deklarácie premenných double prem2 = 1.55E105; cout<<prem1<<"\n"; //výpis na obrazovku cout<<prem2<<"\n"; return 0; //koniec programu }
Výsledok:
1.55e+20 1.55e+105
2. príklad: Skúsme presiahnuť rozsah:
#include <iostream> using namespace std; int main() { float prem1 = 1.89E209; double prem2 = 1.89E409; cout<<prem1<<"\n"; cout<<prem2<<"\n"; return 0; }
Výsledok: Program sa neskompiluje a dostaneme varovanie s touto hláškou:
ahoj.cpp:6:5: warning: floating constant exceeds range of ‘double’ [-Woverflow] double prem2 = 1.89E409
Poprípade môže dôjsť ku kompilácii (overené na CodeBlocks), kde vypíše miesto čísla inf, čiže dosiahnutie „nekonečna“ z pohľadu obmedzenej pamäte programu. Všetko zavisí od nastavenia kompilátorov. V tomto druhom príklade neručím rovnaký výsledok vo všetkých prekladačoch (a rôznych vývojových prostrediach) čiže môže alebo nemusí program skompilovať.
Aritmetické operátory
Každý by mal poznať základné aritmetické operátory, napríklad + je operátor sčítania atď. Rovnaké pravidlá platia i v jazyku C++. Operátor + sčítava, - odčítava, * násobí a / delí.
Poznáme ešte operátor %, čo v C++ predstavuje celočíselné delenie so zvyškom. Upozornenie, že pre desatinné čísla operátor % sa nepoužíva. Len celé čísla! Inak by vám kompilátor ukázal nie veľmi povzbudivú hlášku.
3. príklad: Aritmetické operátory
#include <iostream> using namespace std; int main() { float a = 52.2564; float b = 5.8985; int c = 11; int d = 5; cout <<"Vysledok scitania cisel "<<a<<" a "<<b<<" je: "<<a+b<<"\n"; cout <<"Vysledok odcitania cisel "<<a<<" a "<<b<<" je: "<<a-b<<"\n"; cout <<"Vysledok nasobenia cisel "<<a<<" a "<<b<<" je: "<<a*b<<"\n"; cout <<"Vysledok delenia cisel "<<a<<" a "<<b<<" je: "<<a/b<<"\n"; cout <<"Vysledok celociselneho delenia so zvyskom cisel "<<c<<" a "<<d<<" je: "<<c%d<<"\n"; return 0; }
Výsledok:
Vysledok scitania cisel 52.2564 a 5.8985 je: 58.1549 Vysledok odcitania cisel 52.2564 a 5.8985 je: 46.3579 Vysledok nasobenia cisel 52.2564 a 5.8985 je: 308.234 Vysledok delenia cisel 52.2564 a 5.8985 je: 8.85927 Vysledok celociselneho delenia so zvyskom cisel 11 a 5 je: 1
Kto má prednosť?
Z matematiky poznáte, že ak máme viacero čísel a viacero aritmetických operátorov, tak násobenie a delenie má prednosť pred sčítaním a odčítaním. Je tomu tak i v jazyku C++?
4. príklad:
#include <iostream> using namespace std; int main() { float a = 10.1; float b = 21.4; float c = 31.7; cout <<a*b-c<<"\n"; return 0; }
Výsledok:
184.44
Rozbor programu: Vidíte, že zákony matematiky platia aj v jazyku C++. Vďaka za pravidla, matematiky, bez nej by to bol fakt chaos sa v tom všetkom vyznať.