gpt4 book ai didi

c - for循环中两个 float 相等

转载 作者:行者123 更新时间:2023-11-30 18:48:29 31 4
gpt4 key购买 nike

我在这里想做的是,我采用一个精度值(小于 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 也不能用二进制精确表示。因此测试等效性并不明智。

关于c - for循环中两个 float 相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45667697/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com