维基百科具有small article on finding the nth root of reals和another article on a more efficient implementation,它们显然都适用于浮点数。当然,也存在有效的整数平方根算法-这个站点上有许多关于有效实现的问题。
但是所有这些都处理实数,而我所关心的只是整数。 I did find an existing question on the topic似乎几乎是重复的,但是在询问是否存在有效算法的地方,我正在寻找最有效的算法是什么?
对于上下文,此方法仅与32位二进制补码整数(特别是带符号的强制JS整数)一起使用,并且将作为通用带符号整数幂运算算法int iexp(int base, int exp)
的一部分,处理负指数的情况。 Bit hack和其他两个补码hack在这里是公平的游戏-我不在乎,而且我在某种程度上也了解它们。 (这是针对我正在使用的语言的标准库实现,所以我宁愿这不会太慢。)
语言无关紧要-我可以翻译任何内容,无论是C,JS,Python还是OCaml。
答案 0 :(得分:2)
对于n> 2,一个严重的选择是在查找表中进行二分法搜索。对于n = 3,该表需要1290个条目(因此有11个二分法步骤)。对于n = 4,215个条目(8步)和n = 5,75个条目(7步)…
如果我是对的,您甚至可以压缩表,因为对于较大的数字,低阶位没有影响,并且参数可以按比例缩小。 (这需要扩展。)
对于n> 30,唯一的(截断的)值是0或1。