Wszystkie zagadnienia: Algorytmy
średni metody numerycznepierwiastekHeronmatura rozszerzona z informatyki

Pierwiastek metodą babilońską

Liczy pierwiastek kwadratowy przez uśrednianie x i S/x. Podwaja dokładność co krok.

01

Opis

Metoda babilońska (nazywana też metodą Herona) to bardzo szybki sposób na policzenie pierwiastka kwadratowego liczby – bez gotowej funkcji sqrt. Wystarczą cztery podstawowe działania.

Jak to działa? Chcemy policzyć √S. Zaczynamy od dowolnego dodatniego zgadnięcia x. Potem liczymy S / x i bierzemy średnią obu liczb: x = (x + S/x) / 2. To nowe x jest znacznie bliżej prawdziwego pierwiastka. Powtarzamy kilka razy i już.

Dlaczego to działa? Bo jeśli x jest za duże, to S/x wychodzi za małe – i odwrotnie. Prawdziwy pierwiastek leży zawsze między tymi dwiema liczbami. Ich średnia trafia więc bliżej celu niż każda z nich osobno.

Jak szybko? Wyjątkowo szybko – z każdym krokiem liczba dobrych cyfr mniej więcej się podwaja. Zwykle po 4–5 krokach mamy pierwiastek dokładny do wielu miejsc po przecinku.

Na maturze: typowe zadanie numeryczne – policzyć kilka kroków „na piechotę" albo napisać pętlę, która kończy się, gdy kolejne przybliżenia prawie się nie różnią.

Wizualizacja

Prześledź, jak x i S/x dociskają się do celu. Kreskowana linia to szukany √10. Zwróć uwagę, że jeden znacznik jest zawsze po lewej, a drugi po prawej – pierwiastek leży między nimi, a średnia wpada w środek.

Szukamy √10 (dokładnie ≈ 3,162…)

x
S/x
x = – S / x = –

Naciśnij „Krok", aby uśrednić x i S/x, albo „Auto".

02

Pseudokod

funkcja pierwiastek(S):
  jeżeli S = 0:
    zwróć 0
  x ← S               // dowolne dodatnie zgadnięcie
  dla i od 1 do 20:   // 20 kroków wystarczy z dużym zapasem
    x ← (x + S / x) / 2
  zwróć x
03

Implementacja w Pythonie i C++

def pierwiastek(S, epsilon=1e-10):
    """Pierwiastek kwadratowy z S metodą babilońską (Herona)."""
    if S == 0:
        return 0
    x = S                          # dowolne dodatnie zgadnięcie
    while abs(x * x - S) > epsilon:
        x = (x + S / x) / 2        # średnia z x i S/x
    return x

# Przykład: pierwiastek z 10
print(round(pierwiastek(10), 6))   # Wynik: 3.162278
04

Najczęściej zadawane pytania

Skąd bierze się wzór `(x + S/x) / 2`?

To po prostu średnia dwóch liczb: twojego zgadnięcia x i wyniku S/x. Jedna z nich jest za duża, druga za mała, więc ich środek jest lepszym przybliżeniem pierwiastka niż każda z osobna.

Od jakiej liczby zacząć?

Od dowolnej dodatniej – metoda i tak szybko się zbiegnie. Popularny wybór to x = S albo x = S/2. Im lepsze pierwsze zgadnięcie, tym mniej kroków, ale różnica jest niewielka.

Ile kroków potrzeba?

Bardzo mało. Liczba dobrych cyfr podwaja się z każdym krokiem, więc zwykle po 4–5 krokach masz pierwiastek dokładny do wielu miejsc po przecinku.

Co z zerem i liczbami ujemnymi?

Dla zera wynik to zero – trzeba to obsłużyć osobno, żeby nie dzielić przez zero. Liczby ujemne nie mają pierwiastka rzeczywistego, więc tej metody się do nich nie stosuje.

05

Ćwiczenie

Policzmy √10 metodą babilońską, zaczynając od x = 5. Każdy krok liczymy wzorem x = (x + 10/x) / 2. Wpisz odpowiedzi i kliknij Sprawdź.

Na starcie x = 5, więc `10 / 5 = , a nowe x to średnia liczb 5 i 2`, czyli .

Prawdziwy pierwiastek √10 leży zawsze między x a 10/x. Na starcie było to między 2 a .

Uzupełnij kolejne przybliżenia (zaokrąglij do 3 miejsc po przecinku):

Krokx
start5
po 1. kroku
po 2. kroku

Złożoność obliczeniowa

CzasowaO(log log(1/ε))
PamięciowaO(1)

Czasowa O(log log(1/ε)). Brzmi groźnie, a znaczy tyle, że kroków potrzeba bardzo mało: skoro dokładność podwaja się z każdym krokiem, to do niemal dowolnej precyzji wystarczy kilka–kilkanaście iteracji, niezależnie od wielkości S. Pamięć O(1) – trzymamy tylko jedną liczbę x.

Przećwicz w zadaniach maturalnych

Do tego hasła nie mamy jeszcze przypisanych pojedynczych zadań. Cały spis zadań maturalnych z tego działu jest tutaj:

Zadania z działu: Programowanie

↗

Powiązane zagadnienia

Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: