鱼C论坛

 找回密码
 立即注册
查看: 2207|回复: 2

关于浮点数的问题。

[复制链接]
发表于 2014-6-28 18:11:05 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 风之残月 于 2014-11-10 10:22 编辑

#include <iostream>

int main()
{
using namespace std;

if(0.1 == 0)                      //C++中浮点数0.1 为什么不能和0比较,C++这样设计是为了提升效率吗?
                                                          //请用简单的话说明原理!
cout<<"测试1":
else
cout<<""测试2;

if(0.1 >= 0)
cout<<""测试1;
else
cout<<"测试2;
}

最佳答案

查看完整内容

计算机本质上来说,是使用有限的二进制位来表示数。对于整数如int来说,有限的二进制位就只能表示一定范围的整数。但对于float和double也是用有限的二进制位来表示,为什么它们的表示范围就是无穷大呢?简单想想就知道,一定是中间“漏掉了”很多数没有表示,或者说,值很接近的两个数,很可能其中一个被“漏掉了”,这就导致了这两个数的二进制位表示是一样的。这就是所谓的“浮点数不能精确表示数”的大体原因(具体C++中 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-28 18:11:06 | 显示全部楼层
       计算机本质上来说,是使用有限的二进制位来表示数。对于整数如int来说,有限的二进制位就只能表示一定范围的整数。但对于float和double也是用有限的二进制位来表示,为什么它们的表示范围就是无穷大呢?简单想想就知道,一定是中间“漏掉了”很多数没有表示,或者说,值很接近的两个数,很可能其中一个被“漏掉了”,这就导致了这两个数的二进制位表示是一样的。这就是所谓的“浮点数不能精确表示数”的大体原因(具体C++中浮点数的二进制位如何表示,请baidu   关键字  IEEE754 )。正式这个原因,C和C++中不建议对浮点数使用==这种比较。
      不过话又说回来了,前面只是站在C/C++标准的层面上这样建议的。如果你已经对IEEE754标准十分熟悉,以至于你可以非常清楚的了解浮点数的而进制位是如何表示的,在这种情况下,是可以使用==对浮点数进行比较的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-28 18:14:06 | 显示全部楼层
{:1_1:}浮点数在实际开发中,我都是会去避免使用的,真正用到了人民币方面的运算,直接把人民币扩大100倍转换成整形处理,处理结束后,最后结果显示成有小数的

评分

参与人数 1鱼币 +1 收起 理由
拈花小仙 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 13:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表