首页 > 解决方案 > 为什么巴塞尔问题总是显示相同的数字?

问题描述

你能告诉我为什么这不起作用吗?我必须显示来自巴塞尔问题的 Pi 编号,但我不知道为什么程序一直显示相同的数字,尽管我选择了不同的“数字”。非常感谢!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Pi 3.14159
int main()
{
    int number;
    printf("max number: ");
    scanf("%d",&number);
    float euler;
    float sum=0;
    for(int i=1; i<number;i++)
    {
        sum=sum + (1/(i*i));
    }
    euler=sqrt(6*sum);
    printf("Euler: %lf \n",euler);
    printf("Pi from math library = %f",Pi);
    return 0;
}

标签: c

解决方案


问题是表达式(1/(i*i))是使用整数数学计算的。换句话说,结果始终是整数,对于任何i大于 1 的值,结果将始终为 0。

最简单的解决方法是将该表达式重写为(1.0f/(i*i)). 这将平方i,将结果转换为 a float,然后进行除法。


推荐阅读