Jump to content
  • Advertisement
Sign in to follow this  
Enerjak

finding the exact value of pi (a programming book problem.)

This topic is 2538 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm brushing up on C++ concepts and problem solving, not some problems I know how to do but this one has be stomped, since i haven't studied calculus yet (yes I know it's spelled wrong.) The problem in the book basically gave me the code to find it but, with one catch:
the code was in the wrong order and had a bug in it. now i wrote it out as best as i can but i don't think it's right because i don't get the value of pi per say. I get a one or sometimes a 4, 64, 256, ect.

here is the code:


void valueOfPi()
{
double Pi = 0.0;
int i;
int n;
cout << "Enter the value of n: ";
cin >> n;
cout << endl;

for(i = 0; i < n; i++)
{
if(i % 2 == 0)
{
Pi += (1 / (2 * i + 1));
}
else if(i % 2 == 1)
{
Pi -= (1 / (2 * i + 1));
}
else
{

Pi *= 4;
}
cout << showpoint << fixed << setprecision(i) << Pi << endl;
}
}


some stuff i added since it seemed some stuff was missing from the original.

Share this post


Link to post
Share on other sites
Advertisement
Your expressions involving i are all using integer arithmetic. You need to change at least one of the operands to a double if you want double arithmetic. I.e. use 2.0 instead of 2 or cast something to double, etc.

Share this post


Link to post
Share on other sites

1>c:\users\tim sweeny\documents\visual studio 2008\projects\x\irrapp\chapter5_programming_problems.h(348) : error C2296: '%' : illegal, left operand has type 'double'
1>c:\users\tim sweeny\documents\visual studio 2008\projects\x\irrapp\chapter5_programming_problems.h(348) : error C2297: '%' : illegal, right operand has type 'double'
if(i % static_cast<double>(2.0) == 0)
{
Pi += (1 / (2 * i + 1));
}
else
{
Pi -= (1 / (2 * i + 1));
}

Pi *= 3.0;


when i tried that, i got those errors on top. any ideas?

Share this post


Link to post
Share on other sites
Read the error message:


[color=#000000]chapter5_programming_problems[color=#666600].[color=#000000]h[color=#666600]([color=#006666]348[color=#666600])[color=#000000] [color=#666600]:[color=#000000] error C2296[color=#666600]:[color=#000000] [color=#008800]'%'[color=#000000] [color=#666600]:[color=#000000] illegal[color=#666600],[color=#000000] left operand has type [color=#008800]'double'

[color=#008800]on line 348, the '%' is illegal because the left operand is type 'double'

[color=#008800]- in other words, you can't use modulus with double, it's an integer-only operator

Share this post


Link to post
Share on other sites
Don't change i and n, at least not to solve original problem.

When writing mathematical expressions, it is customary to indicate that floating point types are involved. Or:
Pi += (1.0 / (2 * i + 1));
// or
Pi += (1.0f / (2 * i + 1));
Alternatively:
Pi += (1 / (2.0 * i + 1));
// or
Pi += (1 / (2 * i + 1.0));


It's not really arbitrary, there are strict rules on how types get promoted, but above serves as a hint to programmer to show that floating point and integer math are getting mixed.



Floating point type promotion is just one of those annoying things which has caused many bugs. Strangely enough, Java has exactly the same kind of problem.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!