ruby 检查给定数字中的一个是否是另一个数字的整数次幂的函数
ruby function that checks if one of given number is integer power of another one
受到post的启发,我想概括一下这个问题。
检查给定的数字 m 是否是数字 n 的整数次方。
Here is 我的第一次尝试和测试,一切正常。
然后我尝试写一些不同的东西,灵感来自 link 上对 post 的回复。
主要思想是检查一个数基于另一个数的对数是否为整数。出于这个原因,我使用自然对数知道,
logab/logac =logcb
(我的ruby版本是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) 时,它 returns true
正如我预期的那样。但是对于 (216,6) 或 (25,5) 它 returns false
.
P.S。顺便说一句,我是一个ruby新手,欢迎所有关于编码风格的批评:)
你有一个精度问题,如果你使用 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)
受到
Here is 我的第一次尝试和测试,一切正常。
然后我尝试写一些不同的东西,灵感来自 link 上对 post 的回复。
主要思想是检查一个数基于另一个数的对数是否为整数。出于这个原因,我使用自然对数知道,
logab/logac =logcb
(我的ruby版本是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) 时,它 returns true
正如我预期的那样。但是对于 (216,6) 或 (25,5) 它 returns false
.
P.S。顺便说一句,我是一个ruby新手,欢迎所有关于编码风格的批评:)
你有一个精度问题,如果你使用 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)