plp626
发表于 2012-05-28 11:23
本帖最后由 plp626 于 2012-05-28 11:48 编辑
底下研究过,所谓浮点数不能比较相等有原因; 但以下情况可以比较相等:
所比较的两个数是所在范围内可以被... 2^-2, 2^-1, 2^0, 2^1, 2^2, ... 线性组合表示出来的(每个基的系数范围是[-9,9]);
32位机,float型数据最多可表示 2^32个“精确数”,这些数的相等比较可以用 if(a==b) 来判等;
{1}. float a=1.75,b=1.25; // a,b 都在精确数集合中,他们的和,差必在精确数集合中;
可以
if(a-b==0.5) 。。。。
{2}. float a=1.9, b=1.4; // a,b 都不在精确数集合中, 但他们的差在精确数集合中;
if(a-b==0.5) 。。。。
因为0.5是在32位“精确数”集合中;
第2中情况,会因为受32位范围限制,在a,b,期中之一处于32边界状态下,不成立,
但是,
float a=1.5, b=1.4;
if(a-b==0.1) 则是不可以的;
因为0.1不在32位“精确数”集合中
pmerofc
发表于 2012-05-28 11:33
musezh2
发表于 2012-05-28 18:38
不要揪细节,这不是教材。
有不同的意见,可以展开阐述自己的见解
OwnWaterloo
发表于 2012-05-28 19:10
sacry 发表于 2012-05-23 10:10 static/image/common/back.gif
但是我也觉得,如果你知道有IEEE浮点标准,也许就不会起这么个标题了。
因为不知道IEEE754而吵起来这事常见。但LZ肯定知道IEEE754:
ifreecoding 发表于 2012-05-22 19:23 static/image/common/back.gif
... 略
C语言浮点数
... 略
ANSI/IEEE Std 754-1985标准
... 略
所以我就奇怪了:既然是在说IEEE754,干嘛要扣上C的帽子?
改为《IEEE754原理...》并在支持IEEE754的平台上写一些C的示例以演示这些原理等等。
就精确了,想挑刺都没处下手。
sacry 发表于 2012-05-23 10:10 static/image/common/back.gif
PS:发现有时候想找别人的逻辑错误挺难的。因为对方压根没有什么逻辑,找不到论点。
:luya:
starwing83
发表于 2012-05-28 19:32
回复 24# OwnWaterloo
OW居然又复出了?
OwnWaterloo
发表于 2012-05-28 20:25
回复 25# starwing83
啥叫复出?我说过退出么?
最近被haskell折腾了……最终结果来说,除了cpp(C预处理器,不是C++),其他都还不算太坏……
erlang我就是因为看见它的macro几乎原样搬cpp就想吐…… 结果haskell(至少是haskell实现)也将cpp搬过来了……而且还不支持#与##……
这些个语言啊…… C里面优秀的东西不学,狗屎一般的语法与预处理器倒是都喜欢借鉴……
libra0925
发表于 2013-03-27 11:38
强烈要求删除此贴,误人子弟,楼主都没有对自己发的帖子进行审核,其中很多地方需要指数方式表示,直接无视,严重抗议!
庖丁解犇
发表于 2013-04-02 22:33
谢谢楼主,个人觉得不错,赞一个
fenghw8088
发表于 2013-04-03 09:35
研究、总结、分享的思路挺好的!
有没有人研究在有限精度下的计算优化或数据压缩?
比如存钱时,只需精确到分即可,能否压缩?如果计算更快?
lin5161678
发表于 2013-06-07 15:57
回复 16# sacry
哈哈 说得真好 支持支持