Квадратичное уравнение чаще выражается через a
, b
и c
. Чтобы удовлетворить топор 2 + bx + c = 0, вы получите (-b +/- sqrt(b^2-4ac))
/ 2a в качестве ответов.
Я думаю, что ваша основная проблема в том, что вы по какой-то причине используете по модулю вместо получения квадратного корня. Коэффициент -10 - это просто коэффициент выдумки, который подходит для вашего теста.
У вас должно быть что-то вроде этого:
public static void findRoots(double a, double b, double c)
{
if (b * b < 4 * a * c)
{
throw new IllegalArgumentException("Equation has no roots");
}
double tmp = Math.sqrt(b * b - 4 * a * c);
double firstRoot = (-b + tmp) / (2 * a);
double secondRoot = (-b - tmp) / (2 * a);
System.out.println("Roots: " + firstRoot + ", " + secondRoot);
}
РЕДАКТИРОВАТЬ: Ваш метод modulo
в настоящее время собирается хронически довольно рекурсивно. Попробуйте вместо этого:
public static int modulo(int x)
{
return ((x % 11) + 11) % 11;
}
В основном результат первого % 11
будет в диапазоне [-10, 10] - поэтому после добавления еще 11 и взятия % 11
снова все будет правильно. Нет необходимости возвращаться.
На данный момент нет особых причин использовать его как отдельный метод, поэтому вы можете использовать:
public static void findRoots(double a, double b, double c)
{
int squareMod11 = (((b * b - 4 * a * c) % 11) + 11) % 11;
double tmp = Math.sqrt(squareMod11);
double firstRoot = (-b + tmp) / (2 * a);
double secondRoot = (-b - tmp) / (2 * a);
System.out.println("Roots: " + firstRoot + ", " + secondRoot);
}