Project1

标题: 小数问题 [打印本页]

作者: wbsy8241    时间: 2013-5-22 18:59
标题: 小数问题
本帖最后由 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. }
复制代码


请问为什么会变成这样


导致的BUG:

例:由于坐标 27.9999999996 != 28
所以有1帧未移动 导致移动时候每到1个格子停下来1帧
画面出现卡顿现象
作者: Sion    时间: 2013-5-22 19:15
这是浮点运算的bug。
  1. 0.1 + 0.2 #=> 0.300000.....04
复制代码
使用 round 函数吧,精度应该不需要要那么高的。
作者: wbsy8241    时间: 2013-5-22 19:24
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
作者: Sion    时间: 2013-5-22 19:50
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
复制代码

作者: wbsy8241    时间: 2013-5-26 03:41
  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




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1