这是一个红宝石数学函数错误 - 日志?

时间:2013-11-25 02:21:58

标签: ruby math

以下代码应该返回true。但是,它返回false。

(Math.log 1000, 10) == (Math.log10 1000)
==>false

这是ruby(2.0)日志功能的错误吗?

2 个答案:

答案 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。