有没有c语言大佬解释一下?

 我来答
一剑出血
高粉答主

2022-11-09 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.6亿
展开全部

根源来自于默认类型。如果不在编译环境特殊指明的话,浮点数默认double型,而即便是同一个浮点数,其single和double的值是不同的,比较必然FALSE。

程序中加上强制类型就可以解除(当然也可以修改编译器默认类型设置),如下图所示:

雋懿
2023-04-23 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:289
采纳率:100%
帮助的人:5.3万
展开全部
b) not equal
解释:由于浮点数在计算机内部采用的是二进制存储,因此 0.1 这个十进制值,实际上可能会被储存成一个无法被精确表示的 IEEE 754 二进制值,从而导致比较时不相等。这是因为,0.1 的十进制值在二进制表示中是一个无限循环小数,而计算机中浮点数的存储方式是按照规定的位数来进行存储的,因此存在精度误差。所以,尽管 f1 的声明中赋初值为 0.1,但是在比较时,由于浮点数的精度误差,f1 和 0.1 可能并不相等。因此,输出的结果是 "not equal"。
float f1 = 0.1;
float eps = 0.000001;
if(fabs(f1 - 0.1) < eps) {
printf("equal\n");
} else {
printf("not equal\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式