Напишіть автономну програму, яка при заданому поліномі та зв’язаному знаходить усі справжні корені цього многочлена до абсолютної помилки, що не перевищує межу.
Обмеження
Я знаю, що Mathematica та, ймовірно, деякі інші мови мають односимвольне рішення, і це нудно, тому вам слід дотримуватися примітивних операцій (додавання, віднімання, множення, ділення).
Існує певна гнучкість у форматах введення та виведення. Ви можете приймати дані через аргументи stdin або командного рядка в будь-якому розумному форматі. Ви можете дозволити плаваючу крапку або вимагати використання певного представлення раціональних чисел. Ви можете приймати зв'язану або зворотну зв'язану, і якщо ви використовуєте плаваючу крапку, ви можете припустити, що пов'язана буде не менше 2 ulp. Поліном повинен бути виражений у вигляді списку коефіцієнтів одночленів, але він може бути великим або малим-ендіаном.
Ви повинні бути в змозі обґрунтувати, чому програма завжди працюватиме (числові питання з модулем), хоча не потрібно надавати повний доказ.
Програма повинна обробляти поліноми з повторними коренями.
Приклад
x^2 - 2 = 0 (error bound 0.01)
Вхід може бути, наприклад
-2 0 1 0.01
100 1 0 -2
1/100 ; x^2-2
Вихід може бути, наприклад,
-1.41 1.42
але не
-1.40 1.40
як це має абсолютні помилки приблизно 0,014 ...
Тестові справи
Простий:
x^2 - 2 = 0 (error bound 0.01)
x^4 + 0.81 x^2 - 0.47 x + 0.06 (error bound 10^-6)
Кілька коренів:
x^4 - 8 x^3 + 18 x^2 - 27 (error bound 10^-6)
Поліном Вілкінсона:
x^20 - 210 x^19 + 20615 x^18 - 1256850 x^17 + 53327946 x^16 -1672280820 x^15 +
40171771630 x^14 - 756111184500 x^13 + 11310276995381 x^12 - 135585182899530 x^11 +
1307535010540395 x^10 - 10142299865511450 x^9 + 63030812099294896 x^8 -
311333643161390640 x^7 + 1206647803780373360 x^6 -3599979517947607200 x^5 +
8037811822645051776 x^4 - 12870931245150988800 x^3 + 13803759753640704000 x^2 -
8752948036761600000 x + 2432902008176640000 (error bound 2^-32)
Примітка: Це питання знаходилось в пісочниці приблизно 3 місяці. Якщо ви вважаєте, що це потребує вдосконалення перед публікацією, відвідайте «Пісочницю» та прокоментуйте інші запропоновані питання, перш ніж вони будуть розміщені на Main.
fractions.Fraction
(раціональний тип)? (c) Чи потрібно обробляти поліноми ступеня <1? (г) Чи можна вважати, що провідний коефіцієнт дорівнює 1?