| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1399 人关注过本帖
标题:想问一个问题,关于浮点数精度的,出现了一个奇怪的情况
只看楼主 加入收藏
t_dcy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2019-11-27
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:6 
想问一个问题,关于浮点数精度的,出现了一个奇怪的情况
两个无法精确存储的小数,按人的认知来讲,例如0.4+0.6运算完成为一个可以精确表示的数字,
而对于计算机来讲,始终以二进制运算,那运算结果一个也不精确,可是出现了下面的情况,想问一下为什么?
另外数据从内存中拿出来到寄存器中进行运算时,是始终保持二进制的吧?
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 精确 精度 出现 运算 浮点数 
2019-12-16 11:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
首先,最重要的是:不要贴图,请直接贴代码
你给个图片,别人还得浪费时间打字成代码才可以调试。

浮点数是精确的,它只是不对应“实数”而已。数字计算机就没本事能搞出任何不精确的东西,连个“随机数”都是“伪”的

浮点数 0.4f 对应着实数 0.4000000059604644775390625
浮点数 0.6f 对应着实数 0.60000002384185791015625
浮点数 0.4f+0.6f 对应着实数 1.0000000298023223876953125
当你使用 printf 时 四舍六入五成双(VC用的是四舍五入)成你指定的精度。
2019-12-16 11:28
t_dcy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2019-11-27
收藏
得分:0 
回复 楼主 t_dcy
抱歉抱歉,忘了复制代码了,实在不好意思
我看懂了您的意思,但是我自己试验还是有点问题,我用的是Dev C++,不知道是不是编译器的问题,我想像中的结果应该和您的一样,但是我的结果实在这样的:
#include<stdio.h>
int main()
{
    float a=0.4,b=0.6;
    printf("a=%15.10f\nb=%15.10f\n",a,b);
    printf("a+b=%13.30f",a+b);
    return 0;
 }
图片附件: 游客没有浏览图片的权限,请 登录注册
2019-12-16 12:34
t_dcy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2019-11-27
收藏
得分:0 
回复 楼主 t_dcy
抱歉抱歉,忘了复制代码了,实在不好意思
我看懂了您的意思,但是我自己试验还是有点问题,我用的是Dev C++,不知道是不是编译器的问题,我想像中的结果应该和您的一样,但是我的结果实在这样的:
#include<stdio.h>
int main()
{
    float a=0.4,b=0.6;
    printf("a=%15.10f\nb=%15.10f\n",a,b);
    printf("a+b=%13.30f",a+b);
    return 0;
 }
图片附件: 游客没有浏览图片的权限,请 登录注册
2019-12-16 12:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 t_dcy
这应该是编译器进行了代码优化吧,看你a、b根本没用上,就直接优化成
printf("a=%15.10f\nb=%15.10f\n",0.4f,0.6f);
printf("a+b=%13.30f",1.0f);
2019-12-16 12:48
t_dcy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2019-11-27
收藏
得分:0 
回复 5楼 rjsp
感谢,感谢
2019-12-16 13:06
鱼儿小仙
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:2
注 册:2019-8-12
收藏
得分:0 
说到底是计算机二级制浮点转十进制时出现的精度误差问题,计算机的浮点数的0.0不是真的0,而是有一定的精度的,超过这个精度后,就可能有非0出现,所以会出现上面的那种情况
2019-12-17 17:00
快速回复:想问一个问题,关于浮点数精度的,出现了一个奇怪的情况
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016489 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved