免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: celavi
打印 上一主题 下一主题

浮点数除法:25.8除以3为什么不等于8.6? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-29 12:02 |只看该作者
原帖由 celavi 于 2008-7-29 10:10 发表
#include
#include

main()
{
        float   sum=25.8;
        float   num=3;

        float   grade=0;

        grade=sum/num;
        printf("sum=%lf,num=%lf,grade=%lf\n", sum, num, ...



跟编译器也相关, 建议LZ可以用VC也试一下,这段代码应该输出的是8.6

同样的代码由于编译器的关系,可能会有不同的细节差异.

论坛徽章:
0
12 [报告]
发表于 2008-07-29 14:01 |只看该作者
一直对浮点数没有非常明白的搞懂。
有些特性真的让人很迷糊。

论坛徽章:
0
13 [报告]
发表于 2008-07-29 16:25 |只看该作者
我觉得4楼的回答很让人能理解哈。

其实在C里面,float这个数就是这样的,所以会有个陷进,就是float类型的数和0的比较。

不能用:
float a = 0.0f;
if ( a == 0)

而需要看if ( a<=0.00001 && a>=-0.00001)

论坛徽章:
0
14 [报告]
发表于 2008-07-29 16:46 |只看该作者

回复 #1 celavi 的帖子

有些问题真是碰到才想到啊

论坛徽章:
0
15 [报告]
发表于 2008-07-29 18:33 |只看该作者
原帖由 benbenr 于 2008-7-29 16:25 发表
我觉得4楼的回答很让人能理解哈。

其实在C里面,float这个数就是这样的,所以会有个陷进,就是float类型的数和0的比较。

不能用:
float a = 0.0f;
if ( a == 0)

而需要看if ( a=-0.00001)

:em03 ...


不知这说法(if(a==0)不能用)的依据是什么?
或者你的平台限定的?

我这边在redhat linux(x86)和windows(x86) 下一直都能用, 比如:
float fl;
fl=0.0;
if(fl==0) printf("float verify fl==0 is ok\r\n");
if(0==fl) printf("float verify 0==fl is ok\r\n");

输出:
float verify fl==0 is ok
float verify 0==fl is ok
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP