我刚刚开始C编程(而不是C++),我必须转换二次公式来解决复杂的根,并打印这些。正常二次方程(用于判别> 0),如下所示:如何创建现有函数的复杂类型?
else {
/* */
x1 = ((-b) + sqrt(discr))/(2 * a);
x2 = ((-b) - sqrt(discr))/(2 * a);
printf("%s%.4lf%s%.4lf\n\n", "x1: ", x1, "\tx2: ", x2);
}
当我尝试将其转换成其复杂的价值观我已经使用了以下策略:
创建的新版本的SQRT(DISCR),公式中的复杂的部分,结果通过创建一个可变_Complex双discr_complex = DISCR * I. - > OR discr_complex = DISCR + DISCR * I.
制作x1和x2复杂由'complex x1'o r'_Complex c1'或'complex x1 = ..formula .. * I'或'_Complex x1 = ... formula * I'。
使用关键字complex使每个部分变得复杂。
对于所有这些版本,它不打印正确的复杂输出(#+#i)。我尝试打印正常值,这是正常的,但不适用于复杂的部分。我尝试使用方法creal(x1)和cimag(x1),它们不起作用(未声明的引用creal/cimag),或者x1.real()/ x1.imag(),这也不起作用('imag'在某种不是结构或联盟的情况下)。
有人可能知道如何将我的x1和x2值转换为复数,也许有一个清晰的解释如何返回复杂方程(真实/虚构)的每个分离部分以及如何转换发生我的'正常'公式?
OK会试试,谢谢!附:我已经添加了complex.h,应该提到! csqrt是。 – user2892481
现在它给'未定义的引用csqrt'! – user2892481
尝试此操作:else if(discr <0) { double complex x3,x4; double complex discr_complex = discr * I; double complex sqrt_complex = csqrt(discr_complex); printf(“%f”,sqrt_complex); – user2892481