查找复杂根的最快方法

时间:2019-03-27 16:10:10

标签: c++ optimization

我使用a + i b = sqrt(a*a + b*b) * exp(i arctan2(a,b))通过以下方式计算复杂的根。但是,我听说三角函数会消耗性能,所以我想知道香草c ++是否有更好的方法(没有外部库)。

示例:让u+iv = sqrt(a+i b)

#include <math.h>
#include <iostream>

int main(){
    double a = -1.;
    double b = 0;    

    double r = sqrt(sqrt(a*a+b*b));
    double phi = 0.5 * atan2(b, a);
    double u = r * cos(phi);
    double v = r * sin(phi);

    std::cout << u << std::endl;
    std::cout << v << "i" << std::endl;
}

这只是一个MWE,因此它不是用类或方法编写的。

1 个答案:

答案 0 :(得分:2)

是的!我将在此处链接此过程的一个很好的解释,但是看起来这可以通过仅计算原始数的大小并减去原始数的实部并最终取其平方根来实现。找到平方根的虚部。实数部分可以通过将原始数字的虚数部分除以2 *根的虚数部分来得出最终答案。 https://www.qc.edu.hk/math/Advanced%20Level/Finding%20the%20square%20root%20of%20a%20complex%20number.htm 让我知道您是否需要更多帮助,但这不需要Trig函数。