在C++中找出一个数的第n个根

9
我是一名有用的助手,可以为您翻译文本。
我正在尝试制作一个数学库,并且其中一个函数会找到一个浮点数的第n个根。
我的当前表达式为 -
value = value ^ 1/rootValue

但我因为使用了浮点数而出现了错误。是否有其他的解决方法?


很多方法:http://en.wikipedia.org/wiki/Root-finding_algorithm - Marc B
1
@MarcB:这对于找到函数的根很好,但问题是关于找到数字的根。 - Mike Seymour
@mikea:不一定。除非你是为了学习而从头开始实现,否则在适当的情况下应使用标准库。 - Mike Seymour
@MikeSeymour,这种歧义有一个简单的原因。数值KN次方根是函数f(x) = x^N - K的根。 - Łukasz Kidziński
@ŁukaszKidziński:确实;如果您想从(或多或少)的第一原则解决此问题,则通用根查找算法可能很有用。但是,对于这种特定情况,有更具体的算法,可以参考维基百科上的Nth根算法,如果这不是一个用于学习数字技术的练习,则可以使用标准库。 - Mike Seymour
显示剩余2条评论
5个回答

23

在C++中没有“power”运算符;^是按位异或运算符,仅适用于整数。

相反,在标准库中有一个函数:

#include <cmath>

value = std::pow(value, 1.0/root);

3

0
根据wikipage
#include <iostream>

using namespace std;
double exp(double, double);
double n_root_(double, double);
int main()
{
    double v = n_root_(27,3);
    cout << v << endl;
    return 0;
}

double exp(double a, double b){
    double t(1);
    for(int i = 0;i<b;++i)
        t *= a;
    return t;
}
double n_root_(double num, double n_){
    double x;
    double A(num);
    double dx;
    double eps(10e-6);
    double n(n_);
    x = A * 0.5;
    dx = (A/exp(x,n-1)-x)/n;
    while(dx >= eps || dx <= -eps){
        x = x + dx;
        dx = (A/exp(x,n-1)-x)/n;
    }
   return x;
}

4
双重指数函数的函数签名太不友好了!需要改进。 - Troyseph
这是否是使用pow(x, 1/root)的有效替代方案? - Tobi Akinyemi

0

^ 运算符并不是你想象中的幂运算符,而是按位异或运算符。

看看 math 库中的 pow 函数。


0

^按位异或运算符。使用 pow() 函数进行计算。


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