Foxtable(狐表)用户栏目专家坐堂 → 关于单精度的疑问


  共有4956人关注过本帖树形打印复制链接

主题:关于单精度的疑问

帅哥哟,离线,有人找我吗?
Neha
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:317 积分:2631 威望:0 精华:0 注册:2012/11/28 19:35:00
关于单精度的疑问  发帖心情 Post By:2013/5/9 9:42:00 [只看该作者]

0.48-0.4=多少

 回到顶部
帅哥哟,离线,有人找我吗?
XYT
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1418 积分:7167 威望:0 精华:0 注册:2013/3/18 8:37:00
  发帖心情 Post By:2013/5/9 9:45:00 [只看该作者]

0.08

 回到顶部
帅哥哟,离线,有人找我吗?
Neha
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:317 积分:2631 威望:0 精华:0 注册:2012/11/28 19:35:00
  发帖心情 Post By:2013/5/9 10:01:00 [只看该作者]

不对,我这里结果是一串9

 回到顶部
帅哥哟,离线,有人找我吗?
XYT
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1418 积分:7167 威望:0 精华:0 注册:2013/3/18 8:37:00
  发帖心情 Post By:2013/5/9 10:20:00 [只看该作者]

怎么可能是一串9啊
图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
Neha
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:317 积分:2631 威望:0 精华:0 注册:2012/11/28 19:35:00
  发帖心情 Post By:2013/5/9 10:36:00 [只看该作者]

在命令窗口试,定义两个单精度,然后相减输出结果,我手机上的没法截屏

 回到顶部
帅哥哟,离线,有人找我吗?
XYT
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1418 积分:7167 威望:0 精华:0 注册:2013/3/18 8:37:00
  发帖心情 Post By:2013/5/9 10:41:00 [只看该作者]

也没错啊,只是保留了7位有效数字
图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:4.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2013-5-9 10:41:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
muhua
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/5/9 10:42:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
gsnake
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/5/9 10:44:00 [只看该作者]

没错啊!
0.07999998


 回到顶部
帅哥哟,离线,有人找我吗?
gsnake
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/5/9 10:47:00 [只看该作者]

=0.07999998的原因
这里可能帮到你

1不等于1?

在命令窗口输入下面的代码:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

执行之后,你会惊讶地发现,d和1并不相等。
这是怎么回事,0.7 + 0.2 + 0.1明明就是1,而且第三条语句也证明了d的结果就是1啊。
这是因为d是Double类型,是浮点数,浮点数的1,可能并不会精确地等于1,而只是近似等于1。
毋需过分担心这种误差,这种误差只有10的负16次方左右,对日常计算的结果不会有任何影响,但是会影响数值比较的结果

如果需要精确比较两个数值,该如何处理呢,可以将上述代码改为:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(Math.Round(d,
6) = 1
)

上面的代码,用Round函数将d的小数位数四舍五入到6位,然后再和1比较。

或者用Decimal类型代替Double类型:

Dim d As Decimal
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

Decimal是高精度小数,不会有Double的那种误差。

 


 回到顶部
帅哥哟,离线,有人找我吗?
Neha
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:317 积分:2631 威望:0 精华:0 注册:2012/11/28 19:35:00
  发帖心情 Post By:2013/5/9 11:02:00 [只看该作者]

感谢大家,改高精度结果对了

 回到顶部
总数 11 1 2 下一页