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

时间:2018-01-24 07:17:09

标签: c floating-point division

对于学校作业,我们应该写一小段代码来计算最多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 个答案:

答案 0 :(得分:2)

看一下表达式

  1/ (i*(i+1))

i的类型为int,1(数字)默认为类型int(类型为int的整数常量),是迂腐的。 / p>

因此,所有参与成员都是int类型,算术将是整数算术。它不是浮点运算。因此,对于上面的表达式,对于i的任何值,大于0,您将得到0的结果作为整数除法的结果。

你需要

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

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