Miten pysty laskemaan keskiarvon kolmella luvulla niin, että tulokseksi saataisiin desimaaliluku?
int mean_value(int t, int e, int w) { float l; l = (t+e+w)/3; cout << l << endl << endl; }
Jotain tollasta viritin laskin ohjelmaani funktioksi. Eli ohjelmassani siirretään tämän funktio parametreihin arvot toisessa funktiossa ja sitten lasketaan tässä funktiossa luvut t,e ja w yhteen ja jaetaan ne kolmella. Mutta desimaalilukuja en saa ohjelmaa näyttämään.
Esim:
Lukujen 5,8 ja 9 keskiarvo on 7,33333...
Ohjelma tulostaa vain 7
Kun muuttujat t, e ja w ovat kokonaislukuja, C-kääntäjä kuvittelee, että koko lasku (t+e+w)/3 lasketaan kokonaisluvuilla ja vasta sitten tehdään muunnos liukuluvuksi. Ratkaisu ongelmaan on kirjoittaa lasku muodossa (float)(t+e+w)/3, jolloin lukujen summa muutetaan ensin liukuluvuksi ja vasta sitten jaetaan kolmella. Toinen tapa on muuttaa funktion parametrit kokonaisluvuista (int) liukuluvuiksi (float), jolloin laskukaava kelpaa sellaisenaan.
Eli C++ kielessä ei voi laskea kokonaisluvuilla ja antaa vastaukseksi jokin liukuluku(desimaaliluku) vaan on muuttettava kokonaisluvut liukuluvuiksi jo alussa ennen niiden laskemista jos halutaan saadan vastaukseksi liukuluku?
Kielestä riippumatta ne on pakko muuttaa liukuluvuiksi ennen laskemista. Useimmiten prosessorit eivät osaa jakaa kokonaislukua kokonaisluvulla ja antaa tulokseksi liukulukua.
Joissakin kielissä se, että halutaan tehdä liukulukujako-operaatio kerrotaan suoraan operaattorilla (esim. Visual Basicissa / on liukulukujako ja \ on kokonaislukujako). C:ssä se kerrotaan antamalla joko jaettava tai jakaja tai molemmat liukulukuina.
Eli voisi sanoa, että C on niin nerokas, että sillä on mahdollista tehdä kokonaislukujako ja sijoittaa tulos liukulukumuuttujaan. Alustasta riippuen tuolla muunnoksella ja kokonaisluku- vs. liukulukuoperaatiolla voi olla hyvinkin suuri merkitys esim. nopeuden kannalta.
Helpolla pääsee jos kirjoittaa näin:
l = (t+e+w)/3.0;
Eli koska jakaja on liukuluku, tulos on myös.
Aihe on jo aika vanha, joten et voi enää vastata siihen.