for循环中两个浮点数的相等性

时间:2017-08-14 04:57:16

标签: c loops

我在这里要做的是,我正在获取一个精度值(小于1)并打印所有类型1/n(n是自然数)的数量大于或等于精度值(输入)。

#include <stdio.h>

int main(){
    int i=1,terms=0;
    float n;
    printf("Enter precision value : ");
    scanf("%f",&n);

    while(i>0){
        if ((1.0/i) >= n){
            printf("%f\n",1.0/i);
            sum = sum + (1.0/i);
            terms++;
            i++;
        }
        else
            break;
    }
    printf("number of terms : %d\n",terms);
    return 0;
}

但是如果我输入0.1而不是计数(输出)只显示9.但它应该显示10(它不包括1/10)。

之前我使用的是for循环,我知道用if-else语句打破循环不是最好的。

1 个答案:

答案 0 :(得分:2)

这就是数学以有限精度工作的方式。例如,假设您使用六位小数精度。你能为三分之一做的最好的是0.333333,你能为2/3做的最好是0.666667,但是2 * 1/3不会等于2/3。 3 * 1/3不等于1.但1/3 + 2/3会。

正如1/3不能用十进制精确表示,0.1不能用二进制表示。因此,对等效性的测试并不聪明。