1,105,534 Community Members

approximate of pi

Member Avatar
qqaa007
Newbie Poster
4 posts since Jan 2013
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Hi, I have given a task to write a code about approximate of pi. this is what I wrote from the other example.

the task is to :

(pi^2)/16 = ((-1)^k)/k+1 (1+1/3+1/5+...+1/(2k+1))

Write a program which computes and prints an approximation of pi using a finite number of terms from the above formula. The number of terms must be input from the keyboard (via scanf ). The program must also print an approximation error: the difference between the approximation and the value of pi stored in the macro constant M_PI, defined in <math.h>.

`//*pi^2 / 16 = (-1)^N / N(N+1) (1 + (1/3)) + (1/5) + ... + ( 1/((2*N)+1)))*\\

#include <stdio.h>
#include <math.h>
#ifndef M_PI 
#define M_PI 3.1415926535897932384626433832795
#endif

int main()
{  int N, i;
   double sum=0;

   printf("Enter number of terms: ");
   scanf("%d",&N);

   for (i = 1; i <= N; i++)
   {
     sum += 1.0/i/i; /* try 1.0/(i*i), N=100000 */
   }

   printf("pi = %g\n\n", sqrt(6*sum));}`

I'm not sure is this right or not, but i think this is wrong. so can someone give me some advice?

Thanks for the help

Member Avatar
Labdabeta
Master Poster
769 posts since Feb 2011
Reputation Points: 161 [?]
Q&As Helped to Solve: 42 [?]
Skill Endorsements: 6 [?]
 
0
 

(-1)^k = 1 if k is even, -1 if k is odd so:

for (i=1; i<=N; i++)
{
    if (i%2==0)//if it is even
    {
        sum+=1.0/(i+1);//since i is your k, you just divide by i+1
    }
    else
    {
        sum-=1.0/(i+1);
    }
}

The rest is simply multiplying, then taking the square root.

Member Avatar
qqaa007
Newbie Poster
4 posts since Jan 2013
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

thank for the help, I'm new to c programming.
So is this:

#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif

int main()
{

   int k, i;
   double sum=0;

   printf("Enter number of terms: ");
   scanf("%d",&k);

      for (i=1; i<=k; i++)
    {
    if (i%2==0)//if it is even
    {
    sum+=1.0/(i+1);//since i is your k, you just divide by i+1
    }
    else
    {
    sum-=1.0/(i+1);
    }
    }

   printf("pi = %g\n\n", sqrt(16*sum));
   return 0;

}

But where I type a value, it print out

sqrt : DOMAIN ERROR
pie = + NAN

what does this mean?
I'm think is the "printf" that made my code went wrong.

Member Avatar
deceptikon
Eternally Awesome
4,695 posts since Jan 2012
Reputation Points: 1,341 [?]
Q&As Helped to Solve: 689 [?]
Skill Endorsements: 104 [?]
Administrator
Featured
 
0
 

sqrt : DOMAIN ERROR
pie = + NAN
what does this mean?

It means sum is negative, most likely.

Member Avatar
qqaa007
Newbie Poster
4 posts since Jan 2013
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Finally I got a value. This is what I got.

//*pi^2 / 16 = (-1)^k / k(k+1) (1 + (1/3) + (1/5) + ... + ( 1/((2*k)+1)))*\\

#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif

int main()
{

   int k, i;
   double sum=0;

   printf("Enter number of terms: ");
   scanf("%d",&k);

      for (i = 1; i <= k; i++)
    {
    if (i%2==0)
    {
    sum += (1.0) /(i+1);
    }
    else
    {
    sum -= (-1.0) /(i+1);
    }
    }

   printf("pi = %g\n\n", sqrt(16*sum));
   system("pause");
}

and come out with this
"Enter number of terms : 2
pi = 3.65148"

Have I done what I asked to do?

Thanks

Member Avatar
qqaa007
Newbie Poster
4 posts since Jan 2013
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

oops wrong code.
This is what I did.
I used sum = (sum + 1)/(i+1) and sum = (sum-1)/(i+1)
instead of += and -=

is come out with

enter.....terms : 2 or 20 (even)
pi = 1.63299 or 0.851886

but when I type 3(odd) is

sqrt : DOMAIN ERROR
pie = + NAN

Is the code right?

Thanks

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article