На Си, рассматриваются все варианты вещественных чисел a, b и c. Решения ищутся в поле комплексных чисел C. Для правильной работы программы в сложном и неприятном случае, когда |4ac/b²|<<1, вводится итерационный цикл.
#include <stdio.h>
double Abs(double x) { return x < 0 ? -x : x; }
double Sqrt(double x) { double y = 1., ynew;
if (x == 0) return 0; while (1) { ynew = (y + x /
y) / 2; if (ynew == y) return y; y = ynew; } }
int main() { double a, b, c, d, h, hp, p, s, x1, x2;
int k, l, m; while (1) { printf("a b c > ");
scanf("%lf%lf%lf", &a, &b, &c); if (a == 0)
if (b == 0) if (c == 0) printf("x є C\n"); else
printf("x є ∅\n"); else printf("x = %.16g\n",
- c / b); else { d = b * b - 4 * a * c; if (d == 0)
printf("x = %.16g\n", -b / 2 / a); else if (d < 0)
printf("x = %.16g±%.16gi\n", -b / 2 / a,
Sqrt(-d) / 2 / Abs(a)); else { h = -4 * a * c / b /
b; if (Abs(h) <= 0.43) { x1 = -b / 2 / a * (1 +
Sqrt(1 + h)); m = 0; k = -1; l = 1; hp = -h / 2;
p = 1; s = 0; while (Abs(p) > 0) { m++; k += 2;
l++; p *= hp * k / l; s += p; } x2 = -c / b * (1+s);
printf("%d\n", m); } else { x1 = (-b - Sqrt(d)) /
2 / a; x2 = (-b + Sqrt(d)) / 2 / a; } printf
("x1 = %.16g, x2 = %.16g\n", x1, x2); } } } }
