This question already has answers here:
Is floating point math broken?
(31个答案)
2年前关闭。
我在这里想要做的是,我要获取一个精度值(小于1),并打印所有大于或等于精度值(输入的
但是,如果我给输入
我以前使用过for循环,但我知道用if-else语句中断循环不是最好的事情。
(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一样。因此,进行等效性测试并不明智。