我在这里要做的是,我正在获取一个精度值(小于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 :(得分:2)
这就是数学以有限精度工作的方式。例如,假设您使用六位小数精度。你能为三分之一做的最好的是0.333333,你能为2/3做的最好是0.666667,但是2 * 1/3
不会等于2/3。 3 * 1/3
不等于1.但1/3 + 2/3
会。
正如1/3不能用十进制精确表示,0.1不能用二进制表示。因此,对等效性的测试并不聪明。