CなのかC#なのかわからなかったので、中間のC++で書きました。(C++17 + boost 1.68.0)
C++
1#include <boost/multiprecision/cpp_complex.hpp>
2#include <boost/multiprecision/cpp_int.hpp>
3#include <iostream>
4
5template <typename T> T discriminant(const T &a, const T &b, const T &c)
6{
7 return b * b - 4 * a * c;
8}
9
10template <typename T> T quad_eq(const T &a, const T &b, const T &c)
11{
12 return (-b + sqrt(discriminant(a, b, c))) / (2 * a);
13}
14
15int main()
16{
17 boost::multiprecision::cpp_complex_quad a, b, c;
18 while (!(std::cin >> a >> b >> c)) {
19 std::cin.clear();
20 std::cin.ignore();
21 }
22 auto x = quad_eq(a, b, c);
23 std::cout << std::setprecision(34) << a << u8" x^2 + " << b << u8" x + "
24 << c << u8" = 0 の解のうち大きい方は " << x.real();
25 if (x.imag() > 0)
26 std::cout << " + " << x.imag() << "i";
27 std::cout << u8" です。" << std::endl;
28 return 0;
29}
ちゃんと複素数の解も表示するようにしています。binary128ですので十進数で34桁ぐらいしか精度はありません。