如何在C语言中获取任意次方根?

3

C语言中有sqrt()cbrt()函数,但这些只能计算二次和三次方根。如果要求任意次方根怎么办?如果需要计算57次方根呢?


如果没有标准函数可以满足你的需求,而且你也找不到第三方库包含这个功能(或者由于某些原因无法使用这样的库),那么你就必须自己编写它。 - Some programmer dude
简单的回答:你需要自己编写它(或者如果你不是那种人,可以参考这个)。 - Lakshya Raj
@LakshyaRaj @Some programmer dude -- 伙计们,老实说,“自己写”是相当糟糕的建议。任何类型的数学函数一旦涉及到细节就会变得棘手,但幸运的是这是一个众所周知的问题,有一个众所周知的解决方案(即pow)。 - Robert Dodier
@RobertDodier:是的,这就是为什么我提供了另一种选择。如果那样听起来有点严厉,我很抱歉。看起来被接受的答案使用了我链接中的答案。 - Lakshya Raj
@RobertDodier 任何不存在或由于许可原因无法使用的东西都会变得“棘手”。然后唯一可用的解决方案就是自己编写它(或者雇佣别人为您编写),没有其他办法。而且,这个问题的任何答案都不能在不将其编写到代码中的情况下使用。当然,它可以被复制粘贴,但如果将其放入自己的函数中,它仍然是一种自己编写的方式。 - Some programmer dude
2个回答

6

使用 pow 函数,利用获取57次方根等于将其乘以1/57次幂的性质。

更一般地,要获取 xy 次方根:

double result = pow(x, 1.0 / y);

哦,我的天啊,如果使用 pow() 就可以轻松获得根号,那么就不需要 sqrtcbrt 了。就像任意自然对数 log()log2()log10() 一样。相反,库应该包括 root(index, radicant)log(base, n),而不是一堆任意的变体。 - user15185126
@user15170464 这些对数函数是针对它们特定的底数进行优化的。而 log(base,n) 可以轻松地实现为 log(n)/log(base)(或 log2(n)/log2(base) 等)。 - dbush
自己实现 log 更好吗? - user15185126

2
你应该使用pow(x,n)函数。
该函数的定义如下: double pow(double x, double y)
因此,在上述情况中,你应该写成
```c++ pow(x, n); ```
pow(x, 1.0/57.0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接