以下代码应该返回true。但是,它返回false。
(Math.log 1000, 10) == (Math.log10 1000)
==>false
这是ruby(2.0)日志功能的错误吗?
答案 0 :(得分:3)
使浮点比较工作的一种方法是定义一个“足够接近”,例如0.001或者你感到满意的任何东西,然后做一些像
这样的事情。delta = 0.001
log_1 = Math.log 1000, 10
log_2 = Math.log10 1000
close_enough = (log1 - log2).abs < delta
答案 1 :(得分:0)
irb(main):001:0> Math.log10 1000
=> 3.0
irb(main):002:0> Math.log 1000, 10
=> 2.9999999999999996
如您所见,由于浮点的工作原理,Math.log
是不精确的。
如果您想了解有关浮点的更多信息,可以转到http://floating-point-gui.de/或搜索Google。