fork(1) download
  1. #include <stdio.h>
  2. #include <float.h>
  3. #include <math.h>
  4.  
  5. int main(void) {
  6. double a, b, c;
  7.  
  8. while (scanf("%lf%lf%lf", &a, &b, &c)==3)
  9. {
  10. if (a==0) {
  11. if (b!=0)
  12. printf("%lg\n", -c/b);
  13. else
  14. printf("-");
  15. continue;
  16. }
  17. double delta = b * b - 4 * a * c;
  18. if (fabs(delta)<DBL_EPSILON * (2*fabs(b)+4*fabs(a)+4*fabs(c))) {
  19. printf("%lg\n", -0.5*b/a);
  20. } else if (delta>0) {
  21. double dx = 0.5*sqrt(delta)/a;
  22. double center = -0.5*b/a;
  23. printf("%lg\t%lg\n", center-dx, center+dx);
  24. } else {
  25. double im = 0.5*sqrt(-delta)/a;
  26. double re = -0.5*b/a;
  27. printf("%lg%+lgi\t%lg%+lgi\n", re, im, re, -im);
  28. }
  29. }
  30. return 0;
  31. }
  32.  
Success #stdin #stdout 0s 2160KB
stdin
1 0 1
1 0 -1
1 -5 4
2 10 8
0.2 -0.12 0.018
stdout
-0+1i	-0-1i
-1	1
1	4
-4	-1
0.3