Numerični podatkovni tipi

Numerični podatkovni tipi

Avtor: Anonimen

Za uvod nekoliko teorije

(teorija1.jpg)

IEEE single in double

(single1.jpg) (single2.jpg) (double1-1.jpg) (double2.jpg)

Zaokrožitvena napaka

(zaokrozitvena1.jpg) (zaokrozitvena2.jpg)

C# float

V okolju .NET je prej opisano število v plavajoči vejici IEEE single predstavljeno z numeričnim podatkovnim tipom float. Bolj natančno z binarnim numeričnim tipom.

Lastnosti:

  • 32 bitni zapis
  • najmanjše predstavljivo število: -3.4 × 1038
  • največje predstavljivo število: +3.4 × 1038
  • natančnost: 7 decimalk
  • končnica: f ali F

Uporaba:

Uporabljamo ga lahko, ko ni potrebna velika natančnost pri zaokroževanju. Ker pa je arhitektura sodobnih procesorjev prilagojena računanju z numeričnim podatkovnim tipom double, je vedno manj uporabljan.

Float Hello world!

(float1.jpg)

C# double

IEEE double je v .NET predstavljen kot double. Tako kot float je to binarni numerični podatkovni tip v plavajoči vejici.

Lastnosti:

  • 64 bitni zapis
  • najmanjše predstavljivo število: -1.7 × 10308
  • največje predstavljivo število: 1.7 × 10308+
  • natančnost: 15 decimalk
  • končnica: d ali D

Uporaba

Ta numerični podatkovni tip je najpogosteje uporabljan številski tip v plavajoči vejici. Sodobni procesorji so optimizirani za računanje z njim.

Double Hello world!

(double11.jpg)

C# decimal

V okolju .NET je decimal numerični podatkovni tip v plavajoči vejici. Tako kot double in float. A za razliko od teh dveh decimal ni binarni tip temveč uporablja osnovo 10. S tem je bolj prilagojen povprečni človeški predstavitvi števil. Posledično se odpravi zaokrožitvena napaka za delo v desetiškem sistemu.

Lastnosti:

  • 128 bitni zapis
  • najmanjše predstavljivo število: -7.9 x 1028
  • največje predstavljivo število: 7.9 x 1028
  • natančnost: 28 ali 29 decimalk
  • končnica: m ali M

Uporaba

Decimal uporabljamo ko je potrebna velika natančnost in kjer si ne moremo privoščiti zaokrožitvene napake. Namensko je bil narejen za delo z denarjem. Ker ima desetiško osnovo ga je najbolje uporabljati v primerih kjer delamo z podatki, ki so produkt človeka. Zaradi 128 bitnega zapisa in neprilagojenosti modernih procesorjev je delo z njim počasnejše v primerjavi z float in double.

Decimal Hello world!

(decimal1.jpg)

Končnica double - d ali D

V primeru Hello World double ste morda opazili črko med številkami v stavku: double d = 1d / 3. Ta d takoj za 1 pomeni, da se mora številka 1 obravnavati kot double in ne kot int. V splošnem se decimalno število na desni strani argumenta obravnava kot double. Če pa imamo na desni strani celo število moramo eksplicitno povedati, da ga želimo obravnavati kot double, zato dodamo končnico. Če končnice ne uporabim, prevajalnik sicer ne sproži napake, vendar pa je rezultat nepričakovan:

(double11.jpg)
Uporabljena končnica
(double12.jpg)
Končnica ni uporabljena
(double13.jpg)
Z realnimi števili ni težav

Končnica float - f ali F

Do sedaj smo spoznali, da imamo težavico pri kombinaciji double = celo število. Pri float je posabnosti še več. Celoštevilski argument na desni strani se avtomatsko tretira kot int. Če ga želimo prirediti podatkovnemu tipu float je potrebno dodati končnico f ali F.

Float ima še eno posebnost. Realna števila na desni strani se avtomatsko tretirajo kot double. Če poiskušam realno število prirediti spremenljivki tipa float kar brez uporabe končnice nas prevajalnik opozarja na napako:

(float3.jpg)

Posledično moram tudi pri prirejanju realnih števil uporabiti končnico f ali F:

(float4.jpg)

Končnica decimal - m ali M

Decimal se pri vnašanju obnaša enako kot float. Pri prirejanju celega števila brez končnice prevajalnik ne sproži napake, a rezultati so nenavadni:

(decimal2.jpg)

Pri prirejanju realniega števila brez končnice nas prevajalnik opozori, saj se realno število na desni strani tretira kot double:

(decimal3.jpg)

Zato moram uporabiti končnico:

(decimal4.jpg)

Float v double in obratno

Float v double

Imejmo neko realno število shranjeno v spremenljivki f tipa float. Imejmo še spremenljivko d1 tipa double. Pri prirejanju d1 = f ni nobenega problema.

Ker je double bolj natančen podatkovni tip kot float, se ta sprememba ne zgodi čisto eksplicitno. Primer:

  • f = 0.3333333
  • d1 = f
  • d1 ima vrednost 0.333333343267441

Double si nastavi vrednost, ki je najbližji približek 0.3333333.

Double v float

Imejmo spremenljivko tipa double d v kateri je shranjeno realno število. Imejmo še spremenljivko tipa float f1. Pri prirejanju f1 = d se prevajalnik pritoži, češ da numeričnih tipov ne moremo kar tako spreminjati. Prirejanje popravim v f1 = (float)d. Tako se spremenljivki double le odrežejo nepotrebna decimalna mesta in dobim float.

Pirmer:

(floatdouble.jpg)

Float in double v decimal in obratno

Float in double v decimal

Ko prirejamo spremenljivko tipa double 'd' ali float 'f' spremenljivki tipa decimal 'de' moramo vedno uporabiti pristop:

  • de = (decimal)f
  • de = (decimal)d

Ker decimal deluje na desetiški osnovi tu problemov z zaokroževanjem ni. Še več, decimal pri izpisu 'odreže' nepotrebne ničle.

Decimal v float in double

Pri prirejanju spremenljivke tipa decimal 'de' v spremenljivko tipa float ali double moram uporabiti pristop:

  • d = (double)de
  • f = (float)de

Ker je decimal tip z večjo natančnostjo, se pri spremembi le odrežejo nepotrebne decimalke.

Primer:

(decimal5.jpg)

Vaje in viri

Vaje

Nekaj rešenih primerov, nerešenih nalog ter kvizov lahko najdete na spodnji povezavi:

Vaje

Viri

0%
0%