Стійкі корені квадратного рівняння
Обчисліть дійсні корені квадратного рівняння з масштабованими коефіцієнтами та формулою зі зменшенням втрати значущих цифр.
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Моделі
Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.
Проєкт
Перевірте подвійний і далекі корені, відхиляючи нульовий старший коефіцієнт чи непредставні результати та повертаючи порожній список для від'ємного дискримінанта.
Перевірте перед застосуванням
Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами.
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