Stabilne pierwiastki równania kwadratowego
Oblicz rzeczywiste pierwiastki równania kwadratowego ze skalowanymi współczynnikami i wzorem ograniczającym utratę cyfr.
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 rootsModele
Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
Projekt
Sprawdź pierwiastek podwójny i odległe pierwiastki, odrzucając zerowy współczynnik wiodący lub niereprezentowalne wyniki i zwracając brak pierwiastków dla ujemnego wyróżnika.
Sprawdź przed zastosowaniem
Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
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 rootsSprawdź zachowanie numeryczne poza zwykłym przypadkiem
RootEquinox to środowisko programistyczne AI dla Windows dla programistów badających zachowanie implementacji numerycznej poza jej wygodnymi przykładami. Zacznij od plików projektu i opisz oczekiwany przez aplikację zakres wejść. Poproś podłączony model o analizę obliczenia i reakcji wywołującego, gdy wyniku nie da się reprezentować zgodnie z zamierzeniem.
Procedura pierwiastków równania kwadratowego to jedno konkretne zadanie. Współczynniki o bardzo różnych rzędach wielkości mogą ujawnić zachowanie pomijane przez mały szkolny przykład, więc włącz reprezentatywne dane testowe do rozmowy przed zleceniem zmiany. Omów pierwiastki podwójne, odrzucane współczynniki wiodące i zgłaszanie nieobsługiwanego wyniku. Te pytania wiążą zmianę wzoru z otaczającym kontraktem oprogramowania.
Przejrzyj wynikowy kod i uruchom kontrole projektu na oryginalnych danych testowych, w tym kontrole residuum, gdy są odpowiednie. Nie traktuj wiarygodnie wyglądającej wyświetlonej liczby jako wystarczającego dowodu spełnienia granic implementacji. RootEquinox działa z obsługiwanymi punktami końcowymi zgodnymi z OpenAI lub Anthropic, używając uwierzytelnienia, gdy jest wymagane. Model bez ograniczeń jest opcją, jeśli udostępnia go skonfigurowana usługa, a narzędzia i limity kontekstu zależą od serwera. Celem jest zmiana numeryczna, którą można ocenić na konkretnych przypadkach, z przeglądem odrzucania równie dokładnym jak poprawnego wyjścia.
Ocena poprawki numerycznej
Co dołączyć do zgłoszenia niedokładnego wyniku?
Podaj współczynniki wejściowe, oczekiwane zachowanie i szczegóły wystarczające do odtworzenia rozbieżności. Uwzględnij sposób użycia wyniku przez wywołującego. Daje to asystentowi konkretny problem programistyczny zamiast zachęty do zastąpienia wzoru bez dowodów.
Dlaczego sprawdzać ścieżki odrzucania w kodzie numerycznym?
Wywołujący potrzebują określonej odpowiedzi na nieprawidłowe dane lub niemożliwy do reprezentowania użyteczny wynik. Przejrzyj te ścieżki wraz z obliczeniem, aby poprawka nie zastąpiła jasnego błędu mylącym wyjściem lub nieoczekiwanym wyjątkiem.
Czy kontrola residuum dowodzi dokładności każdego pierwiastka?
Dostarcza informacji o zwracanych wartościach, ale nie jest uniwersalnym dowodem. Użyj jej z przypadkami referencyjnymi i kontrolami granic wejścia oraz przejrzyj założenia tolerancji, zamiast uznawać pojedyncze małe residuum za pełną walidację.
Czy zaakceptować przepisany kod przechodzący zwykłe przykłady?
Dopiero po sprawdzeniu trudnych przypadków, które uzasadniały zadanie. Zachowaj w testach projektu znacznie różniące się skale, pierwiastki podwójne i określone nieprawidłowe wejścia. Przed akceptacją zamiennika przejrzyj każdą zmianę zachowania przy błędzie.
RootEquinox · Zaktualizowano 2026-10-25