c - 为什么巴塞尔问题总是显示相同的数字?
问题描述
你能告诉我为什么这不起作用吗?我必须显示来自巴塞尔问题的 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;
}
解决方案
问题是表达式(1/(i*i))
是使用整数数学计算的。换句话说,结果始终是整数,对于任何i
大于 1 的值,结果将始终为 0。
最简单的解决方法是将该表达式重写为(1.0f/(i*i))
. 这将平方i
,将结果转换为 a float
,然后进行除法。
推荐阅读
- angular - 是否有设置 ngxDaterangepicker 的 endKey 的替代方法?
- javascript - 表单验证未识别空白输入
- sql - 在rails中加入没有关系的表
- embedded - 接收 CAN FD 报文的 CAPL 程序(64 字节)
- windows - 列表显示; 没有 RTL 布局的工具提示
- python - 如何从 python 库签署谷歌街景请求?
- apache-spark - 什么样的数据,我们可以通过Spark处理??结构化/非结构化/半结构化?
- javascript - 使用适用于移动/桌面的 javascript 搜索 30k 谷歌工作表行的有效方法
- javascript - Slick JS垂直滚动连续,但不能拖动/触摸滑动
- azure - Powershell - 如何解析响应