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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |