Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
501 views
in Technique[技术] by (71.8m points)

double - How can I get the result with decimal number in division? C++, Pi

My school give me an assignment to calculate pi.

The result should be :

Question 4
Accuracy set at : 1000

term               pi
1                  4
100                3.13159
200                3.13659
300                3.13826
400                ...
...                ...

The result in my program :

term               pi
1                  4
100                3
200                3
300                3
400                ...
...                ...

I guess that when I do (4 / denominator), the result will lose the decimal number although I have changed some declarations of data type from int to double. (Some websites tell me to do this.) Maybe I do it wrongly.

How can I deal with this problem?

The following is my program.

#include <iostream>
using namespace std;


class Four
{
private:
    int inputedAccuracy;
    double pi;
    int denominator;
    int doneTermCounter;
    double oneTerm;
    int negativeController;

public:
    double question4()
    {
        cout << "Accuracy set at : " ;
        cin >> inputedAccuracy;
        cout << endl;
        pi = 0.0;
        denominator = 1.0;
        doneTermCounter = 0;

        negativeController = 1;
        cout << "Term" << "            " << "pi" << endl;
        cout << "1  " << "             " << "4" << endl;


        for (inputedAccuracy; inputedAccuracy > 0; inputedAccuracy -= 100)
        {
            for (int doneTerm = 0; doneTerm < 100; doneTerm++)
            {
                pi = pi + (negativeController * 4 / denominator);
                negativeController *= -1;
                denominator += 2;
                doneTermCounter++;
            }
            if (doneTermCounter >= 10000)
                cout << doneTermCounter << "             " << pi << endl;
            else
                if (doneTermCounter >= 1000)
                    cout << doneTermCounter << "            " << pi << endl;
                else
                    cout << doneTermCounter << "             " << pi << endl;
        }
        return 0.0;
    }
};

Thank you for your attention!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
pi = pi + (negativeController * 4 / denominator);

The (negativeController * 4 / denominator) expression results in an int because both negativeController and denominator are int. In other words, you're doing an integer division here which explains why you don't get the expected result.

Declare either (or both) of them as double to force a floating-point division.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...