上下文仅仅是解决输入二次方程的函数。这是发生故障的代码部分:

case NEGATIVE:
        printf("\n\n beforehand sqrt(discriminant) is %f%+fi",creal(csqrt(eqn->discriminant)), cimag(csqrt(eqn->discriminant)));
        eqn->complex_root = (-(eqn->b)+csqrt(eqn->discriminant))/(2*eqn->a);
        printf("\n\n result after full formula is %f%+fi", creal(eqn->complex_root),cimag(eqn->complex_root));
        break;


然后我以x^2+5 = 0作为试验方程式得到的输出文本。中间三行是调试文本,其中type仅仅表示程序应针对二次方提供什么样的解决方案(0意味着2个复杂的解决方案):

Please enter the coefficients of the quadratic separated by spaces: 1 0 5

The coefficients entered are a=1, b=0 and c=5.

TYPE RETURNED: 0


beforehand sqrt(discriminant) is 0.000000+4.472136i

result after full formula is 0.000000+0.000000i


The equation defined by 1x^2 +0x +5=0 has two complex solutions, x = 0+0i and x = 0-0i.


我根本不知道为什么结果减少到0。这是怎么回事?

最佳答案

忘记分配包含这些值的变量为复杂变量。即使用float而不是float _Complex。

关于c - 复数的算术无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20007433/

10-11 01:04