» »

[c++] spreminjanje tipa spremenljivke pri računanju

[c++] spreminjanje tipa spremenljivke pri računanju

slovencl ::

Kako določim, ko nekaj računam z intigerji, da vse vmesne rezultate računa npr. kot float...je vredu, če dam pred celoten izraz (float), a moram to pisat pred vsako spremenljicko? Kje lahko kaj več preberem o tem?
  • spremenil: slovencl ()

buba švabe ::

Temu se reče casting, če boš iskal po googlu. V bistvu samo daš (float) pred vsako spremenljivko, ki jo hočeš castat v float. Lahko pa narediš vmesne spremenljivke tipa float, da ti ne bo treba vsakič posebej. Pa še možno je, da bo malenkost hitrejše delalo...
če hočeš razumet rekurzijo, moraš najprej razumet rekurzijo

buba švabe ::

Aja, sem pozabil povedat. Če daš (float) pred cel izraz, boš castal samo končni rezultat, ne pa vmesnih...
če hočeš razumet rekurzijo, moraš najprej razumet rekurzijo

Gundolf ::

Splošno pravilo gre nekako takole:

  • če imaš znotraj formule vse spremenljivke in konstante istega tipa, bo rezultat istega tipa. npr: 1 + 2;

  • če znotraj formule niso vse spremenljivke in konstante istega tipa, se bodo sproti pretvorile v bolj 'splošen' tip (se pravi tako, da ne bo prišlo do izgube informacije). npr: 1 + 2.1 se pretvori v 1.0 + 2.1, zato ker se da int pretvoriti v double brez izgube informacije, obratno pa ne;

  • rezultat se bo samostojno pretvoril v tisti tip katerega je spremenljivka, v katero zapišeš rezultat int i = 1.0 + 2.0; računanje se bo opravilo v doublih, rezultat se bo zapisal v int, compiler bo izpisal tudi warning;

  • v kolikor se tipov ne da pretvoriti v nek skupen splošen tip, bo compiler zajavkal z errorjem.


Najlaže je za pravilnost računov in odpravljanje warningov poskrbeti tako, znotraj formule že pretvoriš vse spremenljivke v isti tip, v katerem želiš da se opravi računanje (pozor še enkrat - računanje != rezultat), in na koncu eksplicitno pretvoriš še rezultat. Npr:

// a, b, c so tipa int
int i = (int)( ((double)a / 3.0) + ((double)b / (double)c) );

Da povzamem zgornjo kodo - a, b in c so vsi inti zato jih explicitno castaš v double, da bo operacija deljenja vrnila double rezultat. Konstanta je že zaradi decimalke tipa double, tako da pri njej ni problema (če želiš float napišeš 3.0f). Ker je retultat double, ti pa želiš rezultat v int spremenljivki, na koncu še vse skupaj pretvoriš v int. To je to.

Ni nobena umetnost, niti znanost. Sledi le logiki, da računske operacije na nekem tipu vedno vrnejo rezultat istega tipa, da gre avtomatsko pretvarjanje zlahka tipov le v smeri posploševanja in da je compilerju najbolje povedati, da veš kaj delaš (da ve, da ti ne rabi pisat warningov) s tem da eksplicitno pretvarjaš vse spremenljivke, konstante, vmesne rezultate, itd v željeni tip.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

float vs decimal

Oddelek: Programiranje
365957 (4090) Looooooka
»

Neznan problem #2 [C]

Oddelek: Programiranje
91547 (1337) videc
»

php string v int

Oddelek: Programiranje
71190 (1014) lukanium
»

[Java] Kako filtrirati, katera števila lahko vpišeš?

Oddelek: Programiranje
182003 (1705) fiction
»

[Java] Deljenje in ostanek

Oddelek: Programiranje
142916 (2500) pr2501

Več podobnih tem