Pereiti prie turinio

Didelė PI reikšmė [C progr.]


Rekomenduojami pranešimai

Sveiki.

Turiu užduotį, parašyti programą kuri atspausdintų 150 skaičiaus PI reikšmių.

Kadangi skaičius netelpa į jokį duomenų tipą ( double, long), įsivaizduoju, kad reikia saugot skaičius į atskirus masyvus po skirtingą elementų skaičių. Tačiau kaip juos grupuoti?

 

Jei logika tokia būtų gerai, kad patartumėt, ar įmestumėt fragmentą programos, arba jei ne taip, gal galit paaiškint programos logiką ?

Ačiū jums.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

ou, super. Ačiū. einu pasinagrinėti.

 

Nelabai ten supratau kame esmė, algoritmas šiek tiek per sudėtingas.

 

Pats esu pasirašęs tokią funkciją :

 

 

#include <stdio.h>
#include <math.h>
#define TIKSLUMAS 100


int main ( int argv, char *argc[] )
{
  float a_nulinis = 1.0;
  float b_nulinis = 1.0/sqrt ( 2.0 );
  float t_nulinis = 1.0/4.0;
  float p_nulinis = 1.0;
  float y;

   int i;
   for ( i = 0; i < 4; i++ )
   {
       y = a_nulinis;
       a_nulinis = (a_nulinis + b_nulinis)/2.0;
       b_nulinis = sqrt ( b_nulinis*y );
       t_nulinis -= p_nulinis*(y - a_nulinis)*(y - a_nulinis);
       p_nulinis *= 2;
   }

   int pi = (a_nulinis + b_nulinis)*(a_nulinis + b_nulinis)/(4*t_nulinis);
   printf ( "%.15f\n", pi );

   return 0;
}

 

Nelabai suprantu kaip apsibrėžti tikslumą ir atspausdint daugiau nei 15 skč. po kablelio :)

P.S Pagal Gauso - Legendre algoritmą.

Redagavo edgha
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki.

Turiu užduotį, parašyti programą kuri atspausdintų 150 skaičiaus PI reikšmių.

Kadangi skaičius netelpa į jokį duomenų tipą ( double, long), įsivaizduoju, kad reikia saugot skaičius į atskirus masyvus po skirtingą elementų skaičių. Tačiau kaip juos grupuoti?

 

Jei logika tokia būtų gerai, kad patartumėt, ar įmestumėt fragmentą programos, arba jei ne taip, gal galit paaiškint programos logiką ?

Ačiū jums.

O linkded list'ą moki? Būtų visai patogu kiekvieną skaitmenį saugoti atskirai. Bet jeigu čia max skaitmenų tik 150 tai susikurti 150 vietų masyvą užtektų ir būtų paprasčiau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tikslumui paaiškinti panaudosiu Leibnico formulę.

 

Tikslumą galima nusakyti, kai keikvienos iteracijos metu skaičiuojamas dydis pakinta vis mažiau, nei prieš tai. Pavyzdžiui, iš Leibnico furmulės iš pradžių pridedi 1, po to atimi 1/3, po to pridėdi 1/5 ir t. t. Kuo toliau, tuo vis mažiau pridedi/atimi. Kaip nustatyti, kada yra reikiamas tikslumas? Kai atlikus iteraciją pridedama/atimami mažiau, negu reikiamas tikslumas.

 

Pavyzdžiui, jeigu reikalingas tikslumas 5 skaičiai po kablelio, tai skaičiavimus galėtum baigti priėjęs 1/100001 < 0,00001 (nors šiuo atveju reikėtų pratęsti šiek tiek daugiau, nes penktas skaitmuo po kablelio vis tiek gali būti netikslus, o ir visą gautą rezultatą dar reikės padauginti iš 4; galbūt reiktų skaičiuoti iki kokių 1/4000004).

 

Su float ir double sužaisti nepavyks, nes jie saugo per mažai skaičių po kablelio. Jeigu tau reikia rasti 150 skaitmenų po kablelio, tai verčiau būtų skaičiuoti sveikąją dalį skaičiaus pi*10^(150 + e), kur e yra papildomi skaitmenys po kablelio tikslumui padidinti (būtų neblogai paimti bent 2. Tada apskaičiavęs šį skaičių, tereikės atspausdinant teisingoj vietoj kablelį padėti.

 

Čia pateiktos įvairios aproksimavimo formulės: http://en.wikipedia.org/wiki/Approximations_of_%CF%80

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...