`
jack
  • 浏览: 390232 次
  • 来自: 温州
社区版块
存档分类
最新评论

罕见ceil bug

    博客分类:
  • Ruby
阅读更多
   真是一个少见的问题,没有找到发生的原因,也没有办法再测试代码中重现,但是项目中就出现,但不是每次都有.看上去很像内存溢出而产生的.

  在某些情况下 项目中A*寻路算法的一部分数值ceil的结果会出错,最典型的就是下面的

29.0.ceil = 30

没错 29.0 ceil运算的结果是30 

但是无论怎么在console中尝试,都无法重现这样的情况. 29.0是找到的其中一个特例,也不知道是否有其他的也会这样.

  






分享到:
评论
9 楼 Magicloud 2009-08-07  
hhhtj 写道
都#to_i了还#ceil什么啊,在#to_i的过程中已经#ceil完成了。

(29.0).to_i过程中ceil了?
8 楼 hhhtj 2009-07-22  
都#to_i了还#ceil什么啊,在#to_i的过程中已经#ceil完成了。
7 楼 jhsea3do 2009-07-21  

irb(main):001:0> n=29.00000000000001
=> 29.0
irb(main):002:0> n.ceil
=> 30
irb(main):003:0> n.to_i.ceil
=> 29
irb(main):004:0> n.to_f.ceil
=> 30
irb(main):005:0> n=29.0
=> 29.0
irb(main):006:0> n.ceil
=> 29
irb(main):007:0> n.to_i.ceil
=> 29
irb(main):008:0> n.to_f.ceil
=> 29

$ irb -v
irb 0.9.5(05/04/13)
$ ruby -v
ruby 1.8.5 (2006-08-25) [i486-linux]
6 楼 ray_linn 2009-07-19  
试了下在ironruby里
29.0.ceil=29
5 楼 jack 2009-07-19  
很有可能。

这些数值是平面上取两点之间直线,等分直线获取的坐标。头尾一定是整形的,但是因为计算需要,转换成浮点了。而这个bug就是出现在头尾上。
4 楼 night_stalker 2009-07-18  
jack 写道
代码中 1.0-300.0的数据都有,不过仅仅几个点上出bug。


可能运算的过程中某几个数多了那么 0.00000000000001 ,毕竟浮点数在计算机的表示是二进制,变成十进制数不是整的情况太常见了 ……
3 楼 jack 2009-07-18  
代码中 1.0-300.0的数据都有,不过仅仅几个点上出bug。
2 楼 night_stalker 2009-07-18  
重现:

01> n=29.00000000000001
#=> 29.0
02> n.ceil
#=> 30


这个小小的差异经常出现在浮点数运算中。

还有个可能是某个地方重定义了 ceil,在 .rb 和 .c 里面搜搜 def ceil 和 "ceil" 或许会有惊喜 ……
1 楼 livte 2009-07-18  
自己目前的環境是
ruby 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux]
Ruby Enterprise Edition 20090610
& Ubuntu9.04
沒有遇到這個問題過:)

相关推荐

Global site tag (gtag.js) - Google Analytics