我已经编写了这个代码来解决二次公式,但是当答案很复杂时(例如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;
}
答案 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}})。