加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 浮点值比较失败

发布时间:2020-12-16 10:24:36 所属栏目:百科 来源:网络整理
导读:参见英文答案 How dangerous is it to compare floating point values?????????????????????????????????????10个 在C中,如果我们执行以下代码: float a = 0.7;if (a 0.7){ printf("Less");}else{ printf("no");} 上面的代码打
参见英文答案 > How dangerous is it to compare floating point values?????????????????????????????????????10个
在C中,如果我们执行以下代码:

float a = 0.7;
if (a < 0.7)
{
    printf("Less");
}
else
{
    printf("no");
}

上面的代码打印“Less”.

但是如果我们执行以下代码:

float a = 1.7;
if (a < 1.7)
{
    printf("Less");
}
else
{
    printf("no");
}

它打印“不”.

这是什么原因? float数据类型如何工作?

解决方法

问题是a是浮点数,但0.7是双精度数.分配给a的值从double转换为float,这会失去精度.当你将一个背面与双精度数比较时,a被加宽为一个双精度,但精度已经丢失,它们可能不再相等.

如果将0.7和1.7更改为0.7f和1.7f,则它们将转换为浮点文字,并且在两种情况下都可靠地比较等于a.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读