首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >float -c数据类型

问float -c数据类型
EN

Stack Overflow用户
提问于 2012-10-29 04:25:19
回答 4查看 1.4K关注 0票数 3
代码语言:javascript
复制
int main() {
float a = 20000000;
float b = 1;
float c = a+b;

if (c==a) { printf("equal"); }

else { printf("not equal");}
return 0;
}

当我运行这个的时候,它显示“相等”。但是,当我将a的值更改为2000000 (减去一个零)时,答案是否定的。为什么?

EN

回答 4

Stack Overflow用户

发布于 2012-10-29 04:33:42

通常,float的精度为24位。数字20000001 = 0x1312d01需要25位才能精确表示,因此必须进行四舍五入。两个可表示值之间的值的正常舍入模式是舍入到最后一位零,因此将20000001舍入为20000000作为float。

2000001 = 0x1e8481需要表示少于24位(21),因此不需要舍入。

票数 7
EN

Stack Overflow用户

发布于 2012-10-29 04:30:54

浮点数通常是近似值,而不是精确值。你可以在这里读到关于它的所有内容:

http://en.wikipedia.org/wiki/Floating_point

票数 3
EN

Stack Overflow用户

发布于 2012-10-29 04:32:00

如果您将两个变量声明为类型为float,然后将这两个值设置为相同的值。如果你比较相等,你会得到不可预知的结果。有关更多详细信息,请使用google For IEEE标准(IEEE754)来表示浮点数。wikipedia article

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13112695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档