标题:[讨论]数据类型Single, Double疑惑——慎用Double
只看楼主
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
 问题点数:0 回复次数:15 
[讨论]数据类型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
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
感谢分享
2007-09-01 17:55
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 

多谢提醒!

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


偶学编程,也许本身就是一个错。。。
2007-09-01 22:39
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
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
明白你的意思

偶学编程,也许本身就是一个错。。。
2007-09-01 23:47
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
得分:0 
以下是引用slore在2007-9-1 17:01:39的发言:
刚才对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楼的结论应该就是原因了。所以大家处理数据的时候不是越大越好,选择适合的范围以减少或者避免误差。

那么 该用什么原则来判定 该用什么范围的数据类型呢?

我想不明白MS当初设计时怎么会留下这样的问题来让我们纳闷呢?


全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-09-02 00:19
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
跟MS什么关系!  机器只认识2进制!这个问题要改变那么要大变革了!

快上课了……
2007-09-02 00:25
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
这是很正常的。

VB QQ群:47715789
2007-09-02 00:37



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




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

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