我怎么能设法从我的代码中获得复数的答案

时间:2017-10-06 13:16:43

标签: c++

我已经编写了这个代码来解决二次公式,但是当答案很复杂时(例如3i或√-3这样的iota形式)它不起作用我想在iota中得到答案我怎么能管理它

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

using namespace std;

int main(){
  float a,b,c,variable1,variable2,variable3,y,x,variable4;
  cout<<"Enter a:";
  cin>>a;
  cout<<"Enter b:";
  cin>>b;
  cout<<"Enter c:";
  cin>>c;
  variable1=-b;
  variable2=b*b;
  variable3=(4*a*c);
  variable4=(variable2-variable3);
  y=sqrtf(variable4);
  x=(variable1+y)/2;
  cout<<"x=" <<x <<endl;
}

1 个答案:

答案 0 :(得分:4)

生成复杂结果的std::sqrt的重载在<complex>中声明,并以std::complex<T>作为参数,因此要获得复杂的结果,您需要从复杂开始输入,并包含正确的标题。

这是一个简单的例子:

#include <complex>
#include <iostream>

int main() {
    std::complex<double> d{ -1, 0 };

    std::cout << std::sqrt(d);
}

结果:

(0,1)

分别代表实部和虚部,所以这是0+1i,正如我们所期望的那样。

值得注意的是,从C ++ 14开始,标准库为虚数定义了用户定义的文字,因此您可以像这样初始化d

using namespace std::literals;

auto d = -1.0 + 0i;

这会产生相同的结果,但对于习惯于将复数编写为a + bi的人来说,它可能看起来更熟悉/更舒适。一个“技巧”是它仍然在进行类型推导,因此要获得complex<double>,您需要使用-1.0而不是-1(我猜这会尝试推导出std::complex<int> // Had to paste something to post the question // Though the whole code can be seen on codepen link var rect = new Rectangle(); var radius = 100, origin = {x: 100, y: 100}; rect.size = new Size(radius, radius); rect.center = new Point(origin.x, origin.y); var cornerSize = radius / 4; var shape = new Path.Rectangle(rect, cornerSize); 1}})。