伸缩极限输出与预期输出不同

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类型,并且运算将是整数运算。它不是浮点运算。因此,对于上述表达式,对于任何大于 0i 值,您将得到 0 作为整数除法的结果。

您需要

  • 使用 floatdouble 类型的操作数
  • 将其中一个操作数转换为 floatdouble

强制浮点运算以获得所需的结果。