Как найти дискриминант

Даны коэффициенты квадратного уравнения. Выясните, сколько корней у этого квадратного уравнения.

Входные данные: На ввод дано три целых числа a, b и c именно в таком порядке. −10^6 ≤ a,b,c≤ 10^6,a≠0

Выходные данные: Выведите одно целое число: количество корней квадратного уравнения ax^2+bx+c=0.

Вот мой код:

#include <bits/stdc++.h>
using namespace std;

int main() {
int a, b, c;
cin >> a >> b >> c;
long double dis;

dis = b * b - 4 * a * c;

if (dis > 0)
    cout << 2;
else if (dis == 0)
    cout << 1;
else
    cout << 0;

return 0;
}

Я нашел проблему(как мне кажется), что при значении b = 10^6 и при попытке возвести b^2 тип duble не выдерживает и выдает ошибку, есть ли какой-нибудь способ решить эту проблему? (Как в итоге оказалось проблема в том, что умножал два int, в комментариях написано)


Ответы (3 шт):

Автор решения: Crypton98

Привет попробуй этот код у меня всё работает

        #include <iostream>
        using namespace std;

         int main ()
         {
         int a, b, c;
         cin >> a >> b >> c;
         long double dis;
         dis = b * b - 4 * a * c;
         if (dis > 0)
          cout << 2;
         else if (dis == 0)
         cout << 1;
         else
          cout << 0;
            return 0;
           }
→ Ссылка
Автор решения: Harry

Не хотел, но, похоже, придется отвечать, а то тут так и будут плавающую точку к целым числам тулить...

#include <iostream>
using namespace std;
int main() {
    long long a, b, c;
    cin >> a >> b >> c;
    a = b*b - 4*a*c;
    cout << (a == 0 ? 1 : a > 0 ? 2 : 0) << endl;
}
→ Ссылка
Автор решения: Stanislav Volodarskiy

Я не согласен с мнением Harry и остальных, кто говорит что double не подходит для решения задачи. double поддерживает точную целочисленную арифметику для значений < 253. Для входных данных верно |a|, |b|, |c| ≤ 106. Любые промежуточные значения не превосходят 5·1012, что меньше чем 253:

#include <iostream>

int main() {
    double a, b, c;
    std::cin >> a >> b >> c;
    double d = b * b - 4. * a * c;
    std::cout << (d == 0 ? 1 : d > 0 ? 2 : 0) << '\n';
}
→ Ссылка