首页 > 解决方案 > 为什么我总是得到负值?

问题描述

我正在用 c 制作莱布尼茨算法来计算饼图。我不断得到负面结果。是因为我使用的 Long Double 类型吗?

#include <stdio.h>
#include<math.h>

int main()
{
int iterations;
int counter = 1;
long double nextnum = 1.;
long double answer=0.0;
long double temp = 0.0;

printf("Iterations: ");
scanf("%d",&iterations);

while (counter <= iterations)
{
    if (counter%2 != 1)
    {
        answer = temp + (1/nextnum*4);
        printf("%1Lf\n",answer);
        nextnum = nextnum +2;
        temp = answer;
        counter++;
    }

    if (counter%2 == 1)
    {
        answer = temp - (1/nextnum*4);
        printf("%1Lf\n",answer);
        nextnum = nextnum +2;
        temp = answer;
        counter++;
    }

}

return 0;
}

标签: cloopswhile-loopdouble

解决方案


你在错误的地方乘以 4。尝试按照 原始公式计算 pi/a

#include <stdio.h>
#include<math.h>

int main()
{
    int iterations;
    int counter = 1;
    long double nextnum = 3.0;
    long double answer = 0.0;
    long double temp = 1.0;

    printf("Iterations: ");
    scanf_s("%d", &iterations);

    while (counter <= iterations)
    {
        if (counter % 2 != 1)
        {
            answer = temp + (1 / nextnum);
            printf("%1Lf\n", answer);

            temp = answer;
        }

        else
        {
            answer = temp - (1 / nextnum);
            printf("%1Lf\n", answer);
            temp = answer;
        }
        nextnum += 2;
        counter++;
    }

    printf("\n Answer: %1Lf\n", 4 * answer);

    return 0;
}

推荐阅读