| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 846 人关注过本帖
标题:浮点数的存储为什么不精准 求简单讲解
只看楼主 加入收藏
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
结帖率:100%
收藏
已结贴  问题点数:4 回复次数:15 
浮点数的存储为什么不精准 求简单讲解
如题........
O(∩_∩)O谢谢!!!
搜索更多相关主题的帖子: 存储 
2011-08-17 11:33
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:1 
因为它只有32位或者64位呀 所以不能表示小数点后面无限位

比如说PI = 3.1415926.... 但是现在我只能存储3.14所以不精准

                                         
===========深入<----------------->浅出============
2011-08-17 11:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
浮点数是精确的,事实上,对于数字计算机,从理论上就无法做个“不精确”的事出来
你需要知道的是:浮点数 不是 实数。仅此而已!
2011-08-17 12:32
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
问的 太绝对了 有些数是精准的

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-17 12:38
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
当然不精确啦;2楼说到点子上了 不过 没说明确
举个例子比如64位的 如果我的数字超出了64位它就会被隔断掉 所以精确度就没了 它不会无限给你缩小的;  
比如我有个类型精确度为小数点后2位, 你输入2.2291 ; 电脑只会接收2.22他不会管你什么四舍五入的;所以也就没了精度;

君生我未生 我生君以老
2011-08-17 13:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不是这样的,浮点数不精准是因为并非任何十进制数值均可转换为二进制表示。

授人以渔,不授人以鱼。
2011-08-17 14:03
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
根源就是精确度不够~其实归根结底用白话来说就是会截断 http://support.

君生我未生 我生君以老
2011-08-17 14:41
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
收藏
得分:0 
围观。学习。
2011-08-17 14:56
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
在计算机中,都是以二进制形式存的
有些小数,转换为2进制是超过范围的,所以不准确。
以上纯属瞎扯
2011-08-17 15:01
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:2 
回复 10楼 hjywyj
10进制转二进制 是用乘2取整的方法;有的类型能识别32位那么他只能将32位的小数来进行乘2取整的换算;那么就是截断了后面的小数; 我说的那里错了 假如2.2291  假如有一种类型只能识别到小数的第2位 那么 他只能将2.22来进行乘2去整的运算 你说这个是不是截断 我哪里乱说了~~~~http://support. 这里有官方的解释~ 我上面说的是原理~

如果要解決此問題,您可以確保值是大於或小於您需要什麼,或取得並使用維護精確度的二元 Coded 小數 (BCD) 程式庫。

他这个意思就是 假如你要有一个浮点数 double a;不管你哪里给它一个只 如果这个值为0;那么进行某些运算;不过这里你不能直接   if(a==0){......}  你可以if(a < 1e-06){}  就是说a小于某个你认为足够小的书 就看做它等于0;而造成这种现象的原因 就是截断我说的截断我举个程序的例子:

程序代码:
#include<stdio.h>
int main(){
    float a1=1.123456712345677;
    float a2=1.123456712345678;
    printf("%s",(a1==a2 ? "相同":"不相同"));
    return 0;
}


[ 本帖最后由 jcw08120110 于 2011-8-17 15:33 编辑 ]

君生我未生 我生君以老
2011-08-17 15:12
快速回复:浮点数的存储为什么不精准 求简单讲解
数据加载中...
 
   



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

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