伸缩极限输出与预期输出不同
Telescopic limit output is different from expected output
对于一项学校作业,我们应该编写一小段代码来计算最大 100 的伸缩极限。预期答案应该是 sum is: 0.99000
但无论我尝试什么,我的输出总是 sum is: 0.00000
。
我希望这是一个我一直忽略的快速修复,但我不能,在我的生活中,弄清楚它是什么。
下面是我的代码:
#include <stdio.h>
int main(){
float ans=0.0;
for(int i=1; i<100; i++){
ans += 1/ (i*(i+1));
}
printf("sum is: %.5f",ans);
return 0;
}
看看表达式
1/ (i*(i+1))
i
是int类型,一个1
(数字)默认是int
类型([=13=类型的整数常量],故作迂腐) .
因此,所有参与成员都是int
类型,并且运算将是整数运算。它不是浮点运算。因此,对于上述表达式,对于任何大于 0
的 i
值,您将得到 0
作为整数除法的结果。
您需要
- 使用
float
或 double
类型的操作数
- 将其中一个操作数转换为
float
或 double
到强制浮点运算以获得所需的结果。
对于一项学校作业,我们应该编写一小段代码来计算最大 100 的伸缩极限。预期答案应该是 sum is: 0.99000
但无论我尝试什么,我的输出总是 sum is: 0.00000
。
我希望这是一个我一直忽略的快速修复,但我不能,在我的生活中,弄清楚它是什么。
下面是我的代码:
#include <stdio.h>
int main(){
float ans=0.0;
for(int i=1; i<100; i++){
ans += 1/ (i*(i+1));
}
printf("sum is: %.5f",ans);
return 0;
}
看看表达式
1/ (i*(i+1))
i
是int类型,一个1
(数字)默认是int
类型([=13=类型的整数常量],故作迂腐) .
因此,所有参与成员都是int
类型,并且运算将是整数运算。它不是浮点运算。因此,对于上述表达式,对于任何大于 0
的 i
值,您将得到 0
作为整数除法的结果。
您需要
- 使用
float
或double
类型的操作数 - 将其中一个操作数转换为
float
或double
到强制浮点运算以获得所需的结果。