This question already has answers here:
Is floating point math broken?
                                
                                    (31个答案)
                                
                        
                                2年前关闭。
            
                    
我在这里想要做的是,我要获取一个精度值(小于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语句中断循环不是最好的事情。

最佳答案

那只是数学工作精度有限的方式。例如,假设您使用六位数的十进制精度。您可以为三分之一做的最好的是0.333333,而可以为2/3做的最好的是0.666667,但是2 * 1/3将不等于2/3。并且3 * 1/3不等于1。但是1/3 + 2/3等于。

正如不能以十进制精确地表示1/3一样,不能以二进制精确地表示0.1一样。因此,进行等效性测试并不明智。

07-24 09:44
查看更多