Устойчивые корни квадратного уравнения
Алгебраически равные формулы могут по-разному работать с плавающей точкой. RootEquinox объединяет примеры коэффициентов и код квадратного уравнения в обсуждении с ИИ для проверки численного изменения.
from math import isfinite, sqrt, copysign
def real_roots(a, b, c):
original = (a, b, c)
if not all(type(v) in (int, float) and isfinite(v) for v in original) or a == 0:
raise ValueError("finite quadratic coefficients")
if c == 0:
other = -b / a
if not isfinite(other) or (b != 0 and other == 0):
raise ValueError("unrepresentable root")
return [0.0] if b == 0 else sorted((0.0, other))
scale = max(map(abs, original))
a, b, c = (v / scale for v in original)
if any(v != 0 and s == 0 for v, s in zip(original, (a,b,c))):
raise ValueError("coefficient underflow")
d = b*b - 4*a*c
if d < 0: return []
if d == 0: roots = [-b / (2*a)]
else:
q = -0.5 * (b + copysign(sqrt(d), b))
if q == 0: raise ValueError("root underflow")
roots = sorted((q/a, c/q))
if not all(map(isfinite, roots)) or (original[2] != 0 and 0 in roots):
raise ValueError("unrepresentable roots")
return rootsПодключение
Базовый URL, учётные данные и доступный сервер.
Проект
Проверьте двойной корень и далеко разнесённые корни, отклоняя нулевой старший коэффициент или непредставимые результаты и возвращая пустой список при отрицательном дискриминанте.
Проверьте перед применением
Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
from math import isfinite, sqrt, copysign
def real_roots(a, b, c):
original = (a, b, c)
if not all(type(v) in (int, float) and isfinite(v) for v in original) or a == 0:
raise ValueError("finite quadratic coefficients")
if c == 0:
other = -b / a
if not isfinite(other) or (b != 0 and other == 0):
raise ValueError("unrepresentable root")
return [0.0] if b == 0 else sorted((0.0, other))
scale = max(map(abs, original))
a, b, c = (v / scale for v in original)
if any(v != 0 and s == 0 for v, s in zip(original, (a,b,c))):
raise ValueError("coefficient underflow")
d = b*b - 4*a*c
if d < 0: return []
if d == 0: roots = [-b / (2*a)]
else:
q = -0.5 * (b + copysign(sqrt(d), b))
if q == 0: raise ValueError("root underflow")
roots = sorted((q/a, c/q))
if not all(map(isfinite, roots)) or (original[2] != 0 and 0 in roots):
raise ValueError("unrepresentable roots")
return rootsПроверяйте численное поведение за пределами обычных случаев
RootEquinox — среда программирования с ИИ для Windows для разработчиков, которым нужно изучить поведение численной реализации за пределами удобных примеров. Начните с файлов проекта и опишите ожидаемый диапазон ввода. Попросите подключённую модель изучить вычисление и реакцию вызывающего кода, когда результат невозможно представить нужным образом.
Конкретная задача — функция корней квадратного уравнения. Коэффициенты с сильно различающимися масштабами могут выявить поведение, незаметное на небольшом учебном примере, поэтому предоставьте характерные тестовые данные до запроса правки. Обсудите кратные корни, отклоняемые старшие коэффициенты и способ сообщения о неподдерживаемом результате. Эти вопросы связывают изменение формулы с окружающим контрактом программы.
Изучите полученные исходники и выполните проверки проекта на исходных тестовых данных, включая проверки невязки там, где они уместны. Не считайте правдоподобное число на экране достаточным доказательством соблюдения пределов реализации. RootEquinox работает с поддерживаемыми OpenAI-совместимыми конечными точками или Anthropic, используя учётные данные при необходимости. Неограниченную модель можно выбрать, если настроенный сервис её предоставляет; инструменты и пределы контекста зависят от сервера. Цель — численное изменение, оцениваемое на явных случаях, где поведение отказа проверяется столь же внимательно, как успешный вывод.
Оценка численной правки
Чем дополнить сообщение о неточном результате?
Предоставьте входные коэффициенты, ожидаемое поведение и достаточно деталей для воспроизведения расхождения. Укажите использование результата вызывающим кодом. Это задаёт конкретную программную задачу вместо приглашения бездоказательно заменить формулу.
Зачем изучать пути отказа в численном коде?
Вызывающему коду нужен определённый ответ при неверном вводе или невозможности представить полезный результат. Проверяйте эти пути вместе с вычислением, чтобы правка не заменяла ясный отказ вводящим в заблуждение выводом или неожиданным исключением.
Может ли проверка невязки доказать точность всех корней?
Она даёт свидетельство о возвращённых значениях, но не универсальное доказательство. Используйте её вместе с эталонными случаями и проверками границ ввода; изучайте допущения о допуске, не принимая одну малую невязку за полную валидацию.
Стоит ли принимать переписывание, проходящее обычные примеры?
Только после проверки сложных случаев, вызвавших задачу. Сохраните в тестах проекта сильно различающиеся масштабы, кратные корни и заданный неверный ввод. Изучите все изменения поведения отказа до принятия замены.
RootEquinox · Обновлено 2026-10-25