Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
492 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 Reply

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...