1

我的学校给我一个计算圆周率的作业。

结果应该是:

Question 4
Accuracy set at : 1000

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

我的程序中的结果:

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

我猜当我这样做时(4 / 分母),虽然我已经将一些数据类型的声明从 int 更改为 double,但结果会丢失十进制数。(一些网站告诉我这样做。)也许我做错了。

我该如何处理这个问题?

以下是我的程序。

#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;
    }
};

感谢您的关注!

4

4 回答 4

4
pi = pi + (negativeController * 4 / denominator);

(negativeController * 4 / denominator)表达式的结果是 a,int因为 bothnegativeControllerdenominatorare int。换句话说,您在这里进行整数除法,这解释了为什么您没有得到预期的结果。

声明它们中的一个(或两个)double以强制进行浮点除法。

于 2013-09-29T11:44:59.553 回答
2
pi = pi + (negativeController * 4 / denominator);

在这一行中,您有一个整数除法(因为 的两个操作数/都是 type int),这意味着除法结果的小数部分被丢弃。

要使用浮点除法,至少一个操作数/边需要是floator类型(long) double。在这种情况下,实现此目的的最简单方法是将(类型的文字)更改为4(类型的文字):int4.0double

然后,在计算 的结果时*negativeController也将转换为double通常的算术转换),产生 adouble作为左侧操作数,/其反过来导致denominator(rhs)也转换为 a double,依此类推。

于 2013-09-29T11:44:27.617 回答
2

你应该改变: -

int denominator;

double denominator;

这里

于 2013-09-29T11:45:41.683 回答
1

我认为更改negativeControllerdenominatortoint可以解决问题,因为正在对整数评估子表达式,从而失去精度。

于 2013-09-29T11:47:58.163 回答