查看: 3257|回复: 4

[已经解决] 小数问题

[复制链接]
梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
发表于 2013-5-22 18:59:15 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 wbsy8241 于 2013-5-26 03:42 编辑

我在脚本中使用每帧+0.2 但多次计算后结果会变x.9999999999 或 x.000000001
  1. 1000.times.inject(0.0){|r,i|
  2. Graphics.update
  3. p Graphics.frame_count.to_s + "    " + r.to_s
  4. r + 0.2
  5. }
复制代码
小数.PNG

请问为什么会变成这样


导致的BUG:
BUG.PNG
例:由于坐标 27.9999999996 != 28
所以有1帧未移动 导致移动时候每到1个格子停下来1帧
画面出现卡顿现象
梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-5-22 19:15:56 | 显示全部楼层
这是浮点运算的bug。
  1. 0.1 + 0.2 #=> 0.300000.....04
复制代码
使用 round 函数吧,精度应该不需要要那么高的。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
 楼主| 发表于 2013-5-22 19:24:04 | 显示全部楼层
Sion 发表于 2013-5-22 19:15
这是浮点运算的bug。使用 round 函数吧,精度应该不需要要那么高的。


我要判断是不是到了1整格 怎么能用round呢
那启不是我永远走不出第一格了...(0.2).round = 0
或者走了1半瞬移到下一格

用默认的公式 + 2**x / 256.0
完全没问题啊
一直是 0.125 0.25 0.375 0.5 不会出现那么长的.99999或.000001

点评

对所有浮点数计算都这样吗= = 或者 要是必须要小数的怎么办比如1/3  发表于 2013-5-22 19:40
.round(5) 里面设置个合适的数  发表于 2013-5-22 19:30
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-5-22 19:50:13 | 显示全部楼层
wbsy8241 发表于 2013-5-22 19:24
我要判断是不是到了1整格 怎么能用round呢
那启不是我永远走不出第一格了...(0.2).round = 0
或者走了1半 ...
  1. 0.2.round(5)          #=> 0.2
  2. 0.2000000001.round(5) #=> 0.2
复制代码

点评

你先搞清楚 round(x) 这个函数的作用.  发表于 2013-5-22 20:06
现在是5帧走完1格 3帧走完 就不适用了 0.33333 * 3 = 0.99999  发表于 2013-5-22 19:57
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
 楼主| 发表于 2013-5-26 03:41:27 | 显示全部楼层
  0.20000001.round(5)
=0.2000│0001
=0.2000
=0.2

  0.19999999.round(5)
=0.1999│9999
=0.2000
=0.2


  0.33333333.round(5)
=0.3333|3333
=0.3333

  (0.3333+0.33333333).round(5)
=0.666633333333.round(5)
=0.6666|3333
=0.6666

  (0.6666+0.33333333).round(5)
=0.999933333333.round(5)
=0.9999|3333
=0.9999

  (0.9999+0.33333333).round(5)
=1.333233333333.round(5)
=1.3332|3333
=1.3332

点评

判断的时候再 round 。- -b  发表于 2013-5-27 23:31
没的认可 也没人回就算了 百度了这不是RUBY特有的问题解决不了.  发表于 2013-5-27 20:52
你自己搞定了? - -b  发表于 2013-5-26 09:19
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部