【发布时间】:2013-12-27 03:16:33
【问题描述】:
我刚刚开始 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);
}
当我尝试将其转换为其复杂值时,我使用了以下策略:
通过创建变量 _Complex double discr_complex = discr * I,创建方程中复数部分 sqrt(discr) 结果的新版本。 -> OR discr_complex = discr + discr * I.
通过 'complex x1' 或 '_Complex c1' 或 'complex x1 = ..formula.. * I' 或 '_Complex x1 = ...formula * I' 使 x1 和 x2 成为复数。
使用关键字 complex 使每个部分都变得复杂。
对于所有这些版本,它不会打印正确的复杂输出 (#+#i)。我尝试打印正常值,这有效,但不适用于复杂部分。我尝试使用不起作用的方法 creal(x1) 和 cimag(x1)(未声明的对 creal / cimag 的引用),或者 x1.real() / x1.imag(),这也不起作用('imag'在不是结构或联合的东西中)。
是否有人可能知道如何将我的 x1 和 x2 值转换为复数,并可能清楚地解释如何返回复杂方程的每个单独部分(实数/虚数)以及这种转换是如何发生的公式?
【问题讨论】:
标签: c function implicit-conversion complex-numbers