标题:[讨论]数据类型Single, Double疑惑——慎用Double
取消只看楼主
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
 问题点数:0 回复次数:6 
[讨论]数据类型Single, Double疑惑——慎用Double

Option Explicit

Private Sub Command1_Click()
Dim a As Single
a = 100.1 - 100
Text1 = a
End Sub

把a定义为Double……结果居然……

论坛里已经发现2个这个原因导致的问题了。

精确度高反而得到的不是准确值!

搜索更多相关主题的帖子: Double Single 类型 数据 慎用 
2007-09-01 16:21
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
我觉得数在内存中保存最终是2进制形式,而二进制对小数是不能精确表示的。某个小数数据是由2^(-1),2^(-2),……,2^(-n)里面这些二进制能表示的小数加起来的,所以产生的误差。

快上课了……
2007-09-01 16:27
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
刚才对0.5,0.25,0.125,0.0625……等

只要能用m个是2^n次方的数就都没有问题了……比如0.75=0.25+0.5=1/2+1/4即2^(-1)+2^(-2)

所以2楼的结论应该就是原因了。所以大家处理数据的时候不是越大越好,选择适合的范围以减少或者避免误差。

快上课了……
2007-09-01 17:01
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
以下是引用coachard在2007-9-1 22:39:21的发言:

多谢提醒!

不过我觉得,高精度在一般情况下没什么不好。因为高精度一般比较时不会直接用=号,而是允许一定的误差范围~~~

我的意思,数据范围确定不是那么高,不要用DOUBLE否则简单的计算都会出错。
100.1-100这种……


快上课了……
2007-09-01 23:46
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
跟MS什么关系!  机器只认识2进制!这个问题要改变那么要大变革了!

快上课了……
2007-09-02 00:25
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
VAL返回的是DOUBLE类型的数据……

快上课了……
2007-09-02 13:21
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
中间用个single变量过渡,或者CSng转成single

快上课了……
2007-09-02 14:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-167033-1-1.html




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

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