{
// исходное уравнение в виде k3*x^3 + k2*x^2 + k1*x + k0
float k3, k2, k1, k0;
k3 = 1; k2 = -20; k1 = 100; k0 = 0;
// любым способом находим действительный корень уравнения
// с определенной точностью
float x1 = 0.001;
// замена переменной: t = x - x1
// приводит к уравнению a*t^3 + b*t^2 + c*t = 0, где
// a = k3, b = 3*k3*x1 + k2, c = 3*k3*x1^2 + 2*k2*x1 + k1
float a = k3;
float b = 3*k3*x1 + k2;
float c = 3*k3*x1*x1 + 2*k2*x1 + k1;
// решаем квадратное уравнение через дискриминант,
// возвращаемся к исходной переменной
float D = b*b - 4*a*c;
if (D < 0) {
println "x1 = ", x1:15:10, ", других действительных корней нет";
}
else {
float x2 = x1 + (-b + sqrt(D))/(2*a);
float x3 = x1 + (-b - sqrt(D))/(2*a);
println "x1 = ", x1:15:10, ", x2 = ", x2:15:10, ", x3 = ", x3:15:10;
}
}