Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Int -> double -> int

Zakki [06.04.2008 17:25:07]

#

Kun kerron integerin doublella, siitä tulee double, mutta miten saan sen takaisin integeriksi?

Legu [06.04.2008 17:32:58]

#

double a = 1.5f;
int b = 3;
printf("a * b = %d", (int)(a * b + 0.5f));

Tuo puolikkaan lisääminen tekee sen, että pyöristys menee 0.5 -> 1. Pelkkä intiksi castaaminen katkaisee luvun desimaalipilkun kohdalta. Esim. (int)(4.9f) -> 4.

Claw [09.04.2008 15:12:15]

#

Lieneekö tehokkaampaa castata ensin tuo double intiksi, ja sitten kertoa int*int? Tarkkuushan siinä mahdollisesti kärsii ainakin.

Hycke [09.04.2008 15:33:27]

#

Claw kirjoitti:

Lieneekö tehokkaampaa castata ensin tuo double intiksi, ja sitten kertoa int*int? Tarkkuushan siinä mahdollisesti kärsii ainakin.

tuolla tavalla 1,5 * 3 = 3 kyllähän se tarkkuus siinä hieman kärsii...

Claw [09.04.2008 15:59:00]

#

Mitä suurempi se double on, sitä vähemmän tarkkuus kuitenkin kärsii. Mutta eipä tunnu olevan kovin kannattavaa muutenkaan, n. 18 - 21 % nopeammalta vaikutti tuo castaaminen ennen laskemista, kun että lasketaan pelkillä doubleilla (tässä alkup. tapauksessahan lasketaan int*doube kylläkin).

Tokihan tuota epätarkkuutta voidaan mahdollisesti kompensoida sillä, että käytetään suuria doubleja ja pieniä kertoimia niille, jos vaan mahdollista.

Ehkä kuitenkin järkevintä castata se tulos. :P

jormi [24.04.2008 10:45:58]

#

Jos laskutulosta käytetään vain tulostukseen, voi doublesta jättää desimaalit pois, pyöristipä stten ylös- tai alaspäin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta