ruby函数,检查给定数字中的一个是否是另一个的整数幂

时间:2015-04-18 20:48:35

标签: ruby ruby-1.8.7

this帖的启发,我想概括一下这个问题。 检查给定的数字m是否是数字n的整数幂。

Here is我的第一次尝试,而且当我测试它时,一切都很好。

然后我试图通过对链接上的帖子的回复来写一些不同的东西。 主要思想是检查一个数字在另一个数字的对数是否为整数。出于这个原因,我使用自然对数知道,
log a b / log a c = log c b < / SUP>

(我的红宝石版本是1.8.7)

def m_is_power_of_n(m,n)

    #false by definiton

    f1  = (n==0 and m!=0)
    f2 = (n==1 and m!=1)

    #true by definition

    t1 = m==n
    t2 = m==1

    if f1 or f2
        return false
    elsif t1 or t2
        return true
    else
        a = Math.log(m)/Math.log(n) 
        return a.to_i == a #updated after steenslag's comment
        #if a.to_i == a
        #    return true
        #else 
        #    return false
        #end
    end
end

我不知道自己做错了什么,因为当我传递参数(36,6),(125,5)时,它会像我预期的那样返回true。但是对于(216,6)或(25,5),它返回false

P.S。顺便说一句,我是一个红宝石新手,欢迎所有关于编码风格的批评:)

1 个答案:

答案 0 :(得分:3)

您有精确度问题,因为您可以看到使用irb

irb(main):001:0> Math.log(216)
=> 5.375278407684165
irb(main):002:0> Math.log(6)
=> 1.791759469228055
irb(main):003:0> Math.log(216)/Math.log(6)
=> 3.0000000000000004

不幸的是,3.0000000000000004不等于3。

您可以对结果进行舍入...

a = (Math.log(m)/Math.log(n)).round(14)