Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Piin laskeminen

InvalidCo [30.09.2007 01:23:10]

#

Innostuin tuossa piin likiarvon erilaisista laskumenetelmistä ja päätin koodata ohjelman, joka laskee haluamani piin likiarvon luvut. Katsoin Wikipediasta sopivan algoritmin, ja kirjoitin seuraavanlaisen ohjelman:

#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

//laske tietty numero piin likiarvosta
int laskePii(int i) {
        int palautus = ( 1/(16*i) ) * ( ( 4/(8*i+1) ) - ( 2/(8*i+4) ) - ( 1/(8*i+5) ) - ( 1/(8*i+6) ) );
        return palautus;
}

int main(int argc,char **argv) {
        int alku,loppu,i,pii;
        cin >> alku;
        cin >> loppu;

        for(i=alku;i<loppu;i++) {
                pii=laskePii(i);
                printf("%i", pii);
        }

        printf("\n");

        return 0;
}

Kuitenkin, kun ajan ohjelman, se palauttaa piin arvoksi pelkkiä nollia... mistä tämä johtuu?

Grez [30.09.2007 02:10:14]

#

Lieneekö asialla jotain tekemistä sen kanssa, että kovasti yrität laskea kokonaisluvuilla (int)

Metabolix [30.09.2007 02:13:14]

#

Lasket kokonaisluvuilla, jolloin 1/x = 0, jos x > 1. Lisääpä lukujesi perään .0 ja muuta funktion ja muuttujien tyypiksi jokin liukulukutyyppi. Parhaan tuloksen saat long double -tyypillä. Vielä parempiin pääsee tietenkin pidemmillä kaavoilla ja jollakin apukirjastolla, joka osaa laskea "pitkillä luvuilla" näiden tavallisten sijaan.

Vastaus

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

Tietoa sivustosta