2017-07-27 120 views
3

我的一个简单的问题是创建一个函数,确定是否可以将某个给定的n编号为a^n,即我需要检查N^(1/n)是否是整体数。不知怎的,这个功能产生错误的结果:Python:函数来确定数字是正方形,立方体等

def is_power(N, n): 
    r = float(N) ** (1./float(n)) 
    return r.is_integer() 

对于n=2它的工作原理。

对于n=3和N = 1,8,27,函数产生True,这是正确的。但从那时起,假,例如对于4*4*4=645*5*5=125。我如何创建一个可以找到正方形/立方体/等的数字的工作函数?

+0

的可能的复制[是浮点运算坏了吗?](https://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

+0

浮点运算是不精确的。 –

+0

谢谢。如何创建一个不会因浮点运算问题而失败的函数? –

回答

6

浮点运算不准确 - 请参阅Is floating point math broken?

因此,请使用精确整数数学来检查您的答案。轮到r到最接近的整数,然后查看电源是否工作。这个Python 3代码删除了一些冗余的类型转换。对于Python 2,将r的计算包装为int()类型转换(对于Python 3不需要)。

def is_power(N, n): 
    r = round(N ** (1.0/n)) 
    return r**n == N