{"id":1447,"date":"2026-04-21T20:21:37","date_gmt":"2026-04-21T18:21:37","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1447"},"modified":"2026-04-21T20:21:38","modified_gmt":"2026-04-21T18:21:38","slug":"pierwiastkowanie-python-w-praktyce-programisty-i-poprawne-obliczanie-pierwiastkow-krok-po-kroku","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/21\/pierwiastkowanie-python-w-praktyce-programisty-i-poprawne-obliczanie-pierwiastkow-krok-po-kroku\/","title":{"rendered":"Pierwiastkowanie Python w praktyce programisty i poprawne obliczanie pierwiastk\u00f3w krok po kroku"},"content":{"rendered":"\n<p>Obliczanie pierwiastk\u00f3w nale\u017cy do tych operacji, kt\u00f3re pojawiaj\u0105 si\u0119 szybciej, ni\u017c zwykle zak\u0142ada pocz\u0105tkuj\u0105cy programista. Wzory geometryczne, analiza danych, statystyka, algorytmy numeryczne, grafika komputerowa czy nawet proste zadania szkolne bardzo cz\u0119sto wymagaj\u0105 wyznaczenia pierwiastka kwadratowego albo pierwiastka stopnia n. Problem wydaje si\u0119 prosty, ale w praktyce \u0142atwo pope\u0142ni\u0107 b\u0142\u0105d zwi\u0105zany z typem danych, precyzj\u0105 oblicze\u0144 albo zachowaniem programu dla liczb ujemnych. Dobrze wida\u0107 to na przyk\u0142adzie zagadnienia okre\u015blanego jako <strong>Pierwiastkowanie Python<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#pierwiastkowanie-python-w-codziennej-pracy-programisty-i-roznica-miedzy-operatorem-potegi-a-funkcja-biblioteczna\">Pierwiastkowanie Python w codziennej pracy programisty i r\u00f3\u017cnica mi\u0119dzy operatorem pot\u0119gi a funkcj\u0105 biblioteczn\u0105<\/a><\/li><li><a href=\"#pierwiastkowanie-python-z-uzyciem-modulu-math-oraz-kontrola-precyzji-obliczen-zmiennoprzecinkowych\">Pierwiastkowanie Python z u\u017cyciem modu\u0142u math oraz kontrola precyzji oblicze\u0144 zmiennoprzecinkowych<\/a><\/li><li><a href=\"#pierwiastkowanie-python-przy-liczbach-ujemnych-oraz-wykorzystanie-liczb-zespolonych-w-praktyce-obliczeniowej\">Pierwiastkowanie Python przy liczbach ujemnych oraz wykorzystanie liczb zespolonych w praktyce obliczeniowej<\/a><\/li><li><a href=\"#najczestsze-bledy-podczas-pracy-z-pierwiastkami-i-sytuacje-ktore-powoduja-nieoczywiste-wyniki\">Najcz\u0119stsze b\u0142\u0119dy podczas pracy z pierwiastkami i sytuacje kt\u00f3re powoduj\u0105 nieoczywiste wyniki<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-sqrt-jest-szybsze-niz-operator-0-5\">Czy sqrt() jest szybsze ni\u017c operator ** 0.5?<\/a><\/li><li><a href=\"#czy-mozna-liczyc-pierwiastek-szescienny-bez-modulu-math\">Czy mo\u017cna liczy\u0107 pierwiastek sze\u015bcienny bez modu\u0142u math?<\/a><\/li><li><a href=\"#dlaczego-wynik-ma-postac-5-0-a-nie-5\">Dlaczego wynik ma posta\u0107 5.0, a nie 5?<\/a><\/li><li><a href=\"#kiedy-uzywac-cmath-zamiast-math\">Kiedy u\u017cywa\u0107 cmath zamiast math?<\/a><\/li><li><a href=\"#czy-warto-zaokraglac-wyniki\">Czy warto zaokr\u0105gla\u0107 wyniki?<\/a><\/li><\/ol><\/li><li><a href=\"#krotkie-zamkniecie-tematu-z-punktu-widzenia-praktyki-programistycznej\">Kr\u00f3tkie zamkni\u0119cie tematu z punktu widzenia praktyki programistycznej<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pierwiastkowanie-python-w-codziennej-pracy-programisty-i-roznica-miedzy-operatorem-potegi-a-funkcja-biblioteczna\">Pierwiastkowanie Python w codziennej pracy programisty i r\u00f3\u017cnica mi\u0119dzy operatorem pot\u0119gi a funkcj\u0105 biblioteczn\u0105<\/h2>\n\n\n\n<p>Najcz\u0119\u015bciej spotykany przypadek to pierwiastek kwadratowy, czyli obliczenie warto\u015bci \u221ax. Matematycznie jest to liczba, kt\u00f3ra po podniesieniu do kwadratu daje warto\u015b\u0107 wej\u015bciow\u0105.<\/p>\n\n\n\n<p>Dla przyk\u0142adu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis matematyczny<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>\u221a9<\/td><td>3<\/td><\/tr><tr><td>\u221a16<\/td><td>4<\/td><\/tr><tr><td>\u221a2<\/td><td>1.41421356&#8230;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W Pythonie istniej\u0105 dwa podstawowe sposoby wykonania takiej operacji:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>operator pot\u0119gowania <code>**<\/code><\/li>\n\n\n\n<li>funkcja <code>sqrt()<\/code> z modu\u0142u <code>math<\/code><\/li>\n<\/ol>\n\n\n\n<p>Pierwiastek kwadratowy mo\u017cna zapisa\u0107 jako pot\u0119g\u0119 o wyk\u0142adniku <code>1\/2<\/code>, czyli:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>x^(1\/2)<\/td><td>pierwiastek kwadratowy<\/td><\/tr><tr><td>x^(1\/3)<\/td><td>pierwiastek sze\u015bcienny<\/td><\/tr><tr><td>x^(1\/n)<\/td><td>pierwiastek n-tego stopnia<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>x = 25<\/code><br><code>wynik = x ** 0.5<\/code><br><code>print(wynik)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Warto\u015b\u0107 wej\u015bciowa<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>25<\/td><td>5.0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Zwraca uwag\u0119 jedna rzecz: wynik jest typu <code>float<\/code>, nawet je\u015bli matematycznie odpowied\u017a jest liczb\u0105 ca\u0142kowit\u0105. To normalne zachowanie.<\/p>\n\n\n\n<p>Analogiczny przyk\u0142ad w C:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>#include &lt;stdio.h&gt;<\/code><br><code>#include &lt;math.h&gt;<\/code><br><br><code>int main() {<\/code><br><code>double x = 25;<\/code><br><code>double wynik = pow(x, 0.5);<\/code><br><code>printf(\"%.2f\\n\", wynik);<\/code><br><code>return 0;<\/code><br><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad w C++:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C++<\/td><td><code>#include &lt;iostream&gt;<\/code><br><code>#include &lt;cmath&gt;<\/code><br><br><code>int main() {<\/code><br><code>double x = 25;<\/code><br><code>double wynik = pow(x, 0.5);<\/code><br><code>std::cout &lt;&lt; wynik &lt;&lt; std::endl;<\/code><br><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Operator <code>**<\/code> jest wygodny, ale przy bardziej formalnych obliczeniach cz\u0119\u015bciej u\u017cywa si\u0119 funkcji bibliotecznych, poniewa\u017c kod jest wtedy czytelniejszy.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<p><code>math.sqrt(25)<\/code> od razu m\u00f3wi, \u017ce chodzi o pierwiastek, a nie og\u00f3lne pot\u0119gowanie.<\/p>\n\n\n\n<p>To ma znaczenie przy wi\u0119kszych projektach, gdzie czytelno\u015b\u0107 jest wa\u017cniejsza ni\u017c skr\u00f3cenie jednej linijki.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pierwiastkowanie-python-z-uzyciem-modulu-math-oraz-kontrola-precyzji-obliczen-zmiennoprzecinkowych\">Pierwiastkowanie Python z u\u017cyciem modu\u0142u math oraz kontrola precyzji oblicze\u0144 zmiennoprzecinkowych<\/h2>\n\n\n\n<p>Modu\u0142 <code>math<\/code> jest podstawowym narz\u0119dziem do oblicze\u0144 matematycznych w Pythonie. Aby u\u017cy\u0107 funkcji pierwiastka kwadratowego, trzeba go zaimportowa\u0107.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>import math<\/code><br><br><code>x = 49<\/code><br><code>wynik = math.sqrt(x)<\/code><br><code>print(wynik)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>x<\/th><th>wynik<\/th><\/tr><\/thead><tbody><tr><td>49<\/td><td>7.0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Funkcja <code>sqrt()<\/code> dzia\u0142a wy\u0142\u0105cznie dla liczb nieujemnych w zbiorze liczb rzeczywistych. Dla warto\u015bci ujemnych pojawi si\u0119 b\u0142\u0105d.<\/p>\n\n\n\n<p>W praktyce cz\u0119sto wa\u017cniejsza od samego obliczenia jest kontrola dok\u0142adno\u015bci.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis<\/th><th>Wynik przybli\u017cony<\/th><\/tr><\/thead><tbody><tr><td>\u221a2<\/td><td>1.4142135623730951<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Komputer operuje na reprezentacji binarnej liczb zmiennoprzecinkowych, wi\u0119c nie ka\u017cda warto\u015b\u0107 mo\u017ce by\u0107 zapisana idealnie. To powoduje drobne r\u00f3\u017cnice.<\/p>\n\n\n\n<p>Przyk\u0142ad por\u00f3wnania:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>import math<\/code><br><br><code>print(math.sqrt(2))<\/code><br><code>print(round(math.sqrt(2), 3))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>pe\u0142na precyzja<\/td><td>1.4142135623730951<\/td><\/tr><tr><td>zaokr\u0105glenie do 3 miejsc<\/td><td>1.414<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W analizie danych lub finansach takie r\u00f3\u017cnice potrafi\u0105 mie\u0107 znaczenie. B\u0142\u0105d rz\u0119du <code>0.000001<\/code> wydaje si\u0119 ma\u0142y, ale przy milionach iteracji mo\u017ce prowadzi\u0107 do realnych problem\u00f3w.<\/p>\n\n\n\n<p>Przy pierwiastkach stopnia n mo\u017cna u\u017cy\u0107 operatora pot\u0119gi:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>x = 27<\/code><br><code>wynik = x ** (1\/3)<\/code><br><code>print(wynik)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Matematycznie oczekujemy <code>3<\/code>, ale czasem wynik mo\u017ce wygl\u0105da\u0107 tak:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Oczekiwane<\/th><th>Mo\u017cliwy wynik<\/th><\/tr><\/thead><tbody><tr><td>3<\/td><td>3.0000000000000004<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To nie jest b\u0142\u0105d programu, tylko konsekwencja arytmetyki zmiennoprzecinkowej.<\/p>\n\n\n\n<p>W takich sytuacjach warto stosowa\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>round()<\/code><\/li>\n\n\n\n<li>por\u00f3wnania z tolerancj\u0105<\/li>\n\n\n\n<li>bibliotek\u0119 <code>decimal<\/code>, je\u015bli potrzebna jest wi\u0119ksza kontrola<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pierwiastkowanie-python-przy-liczbach-ujemnych-oraz-wykorzystanie-liczb-zespolonych-w-praktyce-obliczeniowej\">Pierwiastkowanie Python przy liczbach ujemnych oraz wykorzystanie liczb zespolonych w praktyce obliczeniowej<\/h2>\n\n\n\n<p>W matematyce szkolnej pierwiastek z liczby ujemnej zwykle \u201enie istnieje\u201d w zbiorze liczb rzeczywistych. W informatyce sytuacja jest szersza, poniewa\u017c mo\u017cna korzysta\u0107 z liczb zespolonych.<\/p>\n\n\n\n<p>Dla przyk\u0142adu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>\u221a(-4)<\/td><td>2i<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Je\u015bli u\u017cyjemy <code>math.sqrt(-4)<\/code>, Python zg\u0142osi wyj\u0105tek:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>import math<\/code><br><br><code>print(math.sqrt(-4))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>B\u0142\u0105d:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Typ b\u0142\u0119du<\/th><\/tr><\/thead><tbody><tr><td>ValueError: math domain error<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Do takich przypadk\u00f3w s\u0142u\u017cy modu\u0142 <code>cmath<\/code>.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>import cmath<\/code><br><br><code>print(cmath.sqrt(-4))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>2j<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W Pythonie jednostka urojona to <code>j<\/code>, nie <code>i<\/code>.<\/p>\n\n\n\n<p>To rozwi\u0105zanie jest istotne w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>elektronice<\/li>\n\n\n\n<li>analizie sygna\u0142\u00f3w<\/li>\n\n\n\n<li>obliczeniach in\u017cynierskich<\/li>\n\n\n\n<li>modelowaniu falowym<\/li>\n\n\n\n<li>teorii sterowania<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad praktyczny: impedancja obwodu AC bardzo cz\u0119sto wykorzystuje liczby zespolone. Pr\u00f3ba u\u017cycia zwyk\u0142ego <code>math<\/code> ko\u0144czy si\u0119 b\u0142\u0119dem i strat\u0105 czasu na szukanie problemu.<\/p>\n\n\n\n<p>Warto od pocz\u0105tku rozr\u00f3\u017cnia\u0107:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Modu\u0142<\/th><th>Zakres dzia\u0142ania<\/th><\/tr><\/thead><tbody><tr><td><code>math<\/code><\/td><td>liczby rzeczywiste<\/td><\/tr><tr><td><code>cmath<\/code><\/td><td>liczby zespolone<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To jedna z cz\u0119stszych pu\u0142apek u student\u00f3w i pocz\u0105tkuj\u0105cych programist\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-bledy-podczas-pracy-z-pierwiastkami-i-sytuacje-ktore-powoduja-nieoczywiste-wyniki\">Najcz\u0119stsze b\u0142\u0119dy podczas pracy z pierwiastkami i sytuacje kt\u00f3re powoduj\u0105 nieoczywiste wyniki<\/h2>\n\n\n\n<p>Pierwszy problem to por\u00f3wnywanie liczb zmiennoprzecinkowych operatorem <code>==<\/code>.<\/p>\n\n\n\n<p>Z\u0142y przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>if (27 ** (1\/3)) == 3:<\/code><br><code>print(\"tak\")<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To mo\u017ce nie zadzia\u0142a\u0107 mimo poprawnej logiki.<\/p>\n\n\n\n<p>Lepsze podej\u015bcie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>if abs((27 ** (1\/3)) - 3) &lt; 0.0001:<\/code><br><code>print(\"tak\")<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Drugi problem to brak walidacji danych wej\u015bciowych.<\/p>\n\n\n\n<p>Je\u015bli u\u017cytkownik wpisze liczb\u0119 ujemn\u0105, program powinien to obs\u0142u\u017cy\u0107 \u015bwiadomie, a nie ko\u0144czy\u0107 dzia\u0142anie wyj\u0105tkiem.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>import math<\/code><br><br><code>x = float(input())<\/code><br><br><code>if x &gt;= 0:<\/code><br><code>print(math.sqrt(x))<\/code><br><code>else:<\/code><br><code>print(\"liczba musi by\u0107 nieujemna\")<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Trzeci problem to mylenie operator\u00f3w.<\/p>\n\n\n\n<p>W Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>**<\/code><\/td><td>pot\u0119gowanie<\/td><\/tr><tr><td><code>^<\/code><\/td><td>XOR bitowy<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>B\u0142\u0105d typu:<\/p>\n\n\n\n<p><code>9 ^ 0.5<\/code><\/p>\n\n\n\n<p>nie oznacza pierwiastka i daje zupe\u0142nie inny efekt.<\/p>\n\n\n\n<p>To bardzo cz\u0119sty przypadek u os\u00f3b przechodz\u0105cych z kalkulatora matematycznego do programowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-sqrt-jest-szybsze-niz-operator-0-5\">Czy <code>sqrt()<\/code> jest szybsze ni\u017c operator <code>** 0.5<\/code>?<\/h3>\n\n\n\n<p>Zwykle r\u00f3\u017cnice s\u0105 niewielkie, ale <code>math.sqrt()<\/code> bywa bardziej przewidywalne i czytelniejsze. W kodzie produkcyjnym cz\u0119\u015bciej wybiera si\u0119 funkcj\u0119 biblioteczn\u0105 ni\u017c zapis pot\u0119gowy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-liczyc-pierwiastek-szescienny-bez-modulu-math\">Czy mo\u017cna liczy\u0107 pierwiastek sze\u015bcienny bez modu\u0142u <code>math<\/code>?<\/h3>\n\n\n\n<p>Tak. Wystarczy u\u017cy\u0107 pot\u0119gi <code>1\/3<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>x = 125<\/code><br><code>print(x ** (1\/3))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-wynik-ma-postac-5-0-a-nie-5\">Dlaczego wynik ma posta\u0107 <code>5.0<\/code>, a nie <code>5<\/code>?<\/h3>\n\n\n\n<p>Poniewa\u017c funkcje matematyczne zwykle zwracaj\u0105 typ <code>float<\/code>. Program traktuje wynik jako liczb\u0119 zmiennoprzecinkow\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kiedy-uzywac-cmath-zamiast-math\">Kiedy u\u017cywa\u0107 <code>cmath<\/code> zamiast <code>math<\/code>?<\/h3>\n\n\n\n<p>Gdy istnieje mo\u017cliwo\u015b\u0107 pracy z liczbami ujemnymi pod pierwiastkiem albo z pe\u0142n\u0105 arytmetyk\u0105 zespolon\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-warto-zaokraglac-wyniki\">Czy warto zaokr\u0105gla\u0107 wyniki?<\/h3>\n\n\n\n<p>Tak, szczeg\u00f3lnie przy prezentacji u\u017cytkownikowi lub por\u00f3wnywaniu warto\u015bci. Surowa precyzja binarna cz\u0119sto utrudnia interpretacj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotkie-zamkniecie-tematu-z-punktu-widzenia-praktyki-programistycznej\">Kr\u00f3tkie zamkni\u0119cie tematu z punktu widzenia praktyki programistycznej<\/h2>\n\n\n\n<p>Samo obliczenie pierwiastka jest proste, ale poprawne u\u017cycie tej operacji wymaga zrozumienia typ\u00f3w danych, precyzji oraz ogranicze\u0144 matematycznych. Najwi\u0119cej problem\u00f3w nie wynika z samego wzoru, tylko z za\u0142o\u017ce\u0144: liczba ujemna, por\u00f3wnanie float\u00f3w, b\u0142\u0119dny operator albo brak kontroli danych wej\u015bciowych. W codziennej pracy w\u0142a\u015bnie te drobiazgi zabieraj\u0105 najwi\u0119cej czasu.<\/p>\n\n\n\n<p><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Obliczanie pierwiastk\u00f3w nale\u017cy do tych operacji, kt\u00f3re pojawiaj\u0105 si\u0119 szybciej, ni\u017c zwykle zak\u0142ada pocz\u0105tkuj\u0105cy programista. Wzory geometryczne, analiza danych, statystyka, algorytmy numeryczne, grafika komputerowa czy nawet proste zadania szkolne bardzo cz\u0119sto wymagaj\u0105 wyznaczenia pierwiastka kwadratowego albo pierwiastka stopnia n. Problem wydaje si\u0119 prosty, ale w praktyce \u0142atwo pope\u0142ni\u0107 b\u0142\u0105d zwi\u0105zany z typem danych, precyzj\u0105 oblicze\u0144 albo zachowaniem programu dla liczb ujemnych. Dobrze wida\u0107 to na przyk\u0142adzie zagadnienia okre\u015blanego jako Pierwiastkowanie Python. Pierwiastkowanie Python w codziennej pracy programisty i r\u00f3\u017cnica mi\u0119dzy operatorem pot\u0119gi a funkcj\u0105 biblioteczn\u0105 Najcz\u0119\u015bciej spotykany przypadek to pierwiastek kwadratowy, czyli obliczenie warto\u015bci \u221ax. Matematycznie jest to liczba, kt\u00f3ra po podniesieniu do kwadratu daje warto\u015b\u0107 wej\u015bciow\u0105. Dla przyk\u0142adu: Zapis matematyczny Wynik \u221a9 3 \u221a16 4 \u221a2 1.41421356&#8230; W Pythonie istniej\u0105 dwa podstawowe sposoby wykonania takiej operacji: Pierwiastek kwadratowy mo\u017cna zapisa\u0107 jako pot\u0119g\u0119 o wyk\u0142adniku 1\/2, czyli: Wz\u00f3r Znaczenie x^(1\/2) pierwiastek kwadratowy x^(1\/3) pierwiastek sze\u015bcienny x^(1\/n) pierwiastek n-tego stopnia Przyk\u0142ad w Pythonie: J\u0119zyk Kod Python x = 25wynik = x ** 0.5print(wynik) Wynik: Warto\u015b\u0107 wej\u015bciowa Wynik 25 5.0 Zwraca uwag\u0119 jedna rzecz: wynik jest typu float, nawet je\u015bli matematycznie odpowied\u017a jest liczb\u0105 ca\u0142kowit\u0105. To normalne zachowanie. Analogiczny przyk\u0142ad w C: J\u0119zyk Kod C #include &lt;stdio.h&gt;#include &lt;math.h&gt; int main() {double x = 25;double wynik = pow(x, 0.5);printf(&#8222;%.2f\\n&#8221;, wynik);return 0;} Przyk\u0142ad w C++: J\u0119zyk Kod C++ #include &lt;iostream&gt;#include &lt;cmath&gt; int main() {double x = 25;double wynik = pow(x, 0.5);std::cout &lt;&lt; wynik &lt;&lt; std::endl;} Operator ** jest wygodny, ale przy bardziej formalnych obliczeniach cz\u0119\u015bciej u\u017cywa si\u0119 funkcji bibliotecznych, poniewa\u017c kod jest wtedy czytelniejszy. Przyk\u0142ad: math.sqrt(25) od razu m\u00f3wi, \u017ce chodzi o pierwiastek, a nie og\u00f3lne pot\u0119gowanie. To ma znaczenie przy wi\u0119kszych projektach, gdzie czytelno\u015b\u0107 jest wa\u017cniejsza ni\u017c skr\u00f3cenie jednej linijki. Pierwiastkowanie Python z u\u017cyciem modu\u0142u math oraz kontrola precyzji oblicze\u0144 zmiennoprzecinkowych Modu\u0142 math jest podstawowym narz\u0119dziem do oblicze\u0144 matematycznych w Pythonie. Aby u\u017cy\u0107 funkcji pierwiastka kwadratowego, trzeba go zaimportowa\u0107. Przyk\u0142ad: J\u0119zyk Kod Python import math x = 49wynik = math.sqrt(x)print(wynik) Wynik: x wynik 49 7.0 Funkcja sqrt() dzia\u0142a wy\u0142\u0105cznie dla liczb nieujemnych w zbiorze liczb rzeczywistych. Dla warto\u015bci ujemnych pojawi si\u0119 b\u0142\u0105d. W praktyce cz\u0119sto wa\u017cniejsza od samego obliczenia jest kontrola dok\u0142adno\u015bci. Przyk\u0142ad: Zapis Wynik przybli\u017cony \u221a2 1.4142135623730951 Komputer operuje na reprezentacji binarnej liczb zmiennoprzecinkowych, wi\u0119c nie ka\u017cda warto\u015b\u0107 mo\u017ce by\u0107 zapisana idealnie. To powoduje drobne r\u00f3\u017cnice. Przyk\u0142ad por\u00f3wnania: J\u0119zyk Kod Python import math print(math.sqrt(2))print(round(math.sqrt(2), 3)) Wynik: Operacja Wynik pe\u0142na precyzja 1.4142135623730951 zaokr\u0105glenie do 3 miejsc 1.414 W analizie danych lub finansach takie r\u00f3\u017cnice potrafi\u0105 mie\u0107 znaczenie. B\u0142\u0105d rz\u0119du 0.000001 wydaje si\u0119 ma\u0142y, ale przy milionach iteracji mo\u017ce prowadzi\u0107 do realnych problem\u00f3w. Przy pierwiastkach stopnia n mo\u017cna u\u017cy\u0107 operatora pot\u0119gi: J\u0119zyk Kod Python x = 27wynik = x ** (1\/3)print(wynik) Matematycznie oczekujemy 3, ale czasem wynik mo\u017ce wygl\u0105da\u0107 tak: Oczekiwane Mo\u017cliwy wynik 3 3.0000000000000004 To nie jest b\u0142\u0105d programu, tylko konsekwencja arytmetyki zmiennoprzecinkowej. W takich sytuacjach warto stosowa\u0107: Pierwiastkowanie Python przy liczbach ujemnych oraz wykorzystanie liczb zespolonych w praktyce obliczeniowej W matematyce szkolnej pierwiastek z liczby ujemnej zwykle \u201enie istnieje\u201d w zbiorze liczb rzeczywistych. W informatyce sytuacja jest szersza, poniewa\u017c mo\u017cna korzysta\u0107 z liczb zespolonych. Dla przyk\u0142adu: Zapis Wynik \u221a(-4) 2i Je\u015bli u\u017cyjemy math.sqrt(-4), Python zg\u0142osi wyj\u0105tek: J\u0119zyk Kod Python import math print(math.sqrt(-4)) B\u0142\u0105d: Typ b\u0142\u0119du ValueError: math domain error Do takich przypadk\u00f3w s\u0142u\u017cy modu\u0142 cmath. Przyk\u0142ad: J\u0119zyk Kod Python import cmath print(cmath.sqrt(-4)) Wynik: Wynik 2j W Pythonie jednostka urojona to j, nie i. To rozwi\u0105zanie jest istotne w: Przyk\u0142ad praktyczny: impedancja obwodu AC bardzo cz\u0119sto wykorzystuje liczby zespolone. Pr\u00f3ba u\u017cycia zwyk\u0142ego math ko\u0144czy si\u0119 b\u0142\u0119dem i strat\u0105 czasu na szukanie problemu. Warto od pocz\u0105tku rozr\u00f3\u017cnia\u0107: Modu\u0142 Zakres dzia\u0142ania math liczby rzeczywiste cmath liczby zespolone To jedna z cz\u0119stszych pu\u0142apek u student\u00f3w i pocz\u0105tkuj\u0105cych programist\u00f3w. Najcz\u0119stsze b\u0142\u0119dy podczas pracy z pierwiastkami i sytuacje kt\u00f3re powoduj\u0105 nieoczywiste wyniki Pierwszy problem to por\u00f3wnywanie liczb zmiennoprzecinkowych operatorem ==. Z\u0142y przyk\u0142ad: J\u0119zyk Kod Python if (27 ** (1\/3)) == 3:print(&#8222;tak&#8221;) To mo\u017ce nie zadzia\u0142a\u0107 mimo poprawnej logiki. Lepsze podej\u015bcie: J\u0119zyk Kod Python if abs((27 ** (1\/3)) &#8211; 3) &lt; 0.0001:print(&#8222;tak&#8221;) Drugi problem to brak walidacji danych wej\u015bciowych. Je\u015bli u\u017cytkownik wpisze liczb\u0119 ujemn\u0105, program powinien to obs\u0142u\u017cy\u0107 \u015bwiadomie, a nie ko\u0144czy\u0107 dzia\u0142anie wyj\u0105tkiem. Przyk\u0142ad: J\u0119zyk Kod Python import math x = float(input()) if x &gt;= 0:print(math.sqrt(x))else:print(&#8222;liczba musi by\u0107 nieujemna&#8221;) Trzeci problem to mylenie operator\u00f3w. W Pythonie: Zapis Znaczenie ** pot\u0119gowanie ^ XOR bitowy B\u0142\u0105d typu: 9 ^ 0.5 nie oznacza pierwiastka i daje zupe\u0142nie inny efekt. To bardzo cz\u0119sty przypadek u os\u00f3b przechodz\u0105cych z kalkulatora matematycznego do programowania. FAQ Czy sqrt() jest szybsze ni\u017c operator ** 0.5? Zwykle r\u00f3\u017cnice s\u0105 niewielkie, ale math.sqrt() bywa bardziej przewidywalne i czytelniejsze. W kodzie produkcyjnym cz\u0119\u015bciej wybiera si\u0119 funkcj\u0119 biblioteczn\u0105 ni\u017c zapis pot\u0119gowy. Czy mo\u017cna liczy\u0107 pierwiastek sze\u015bcienny bez modu\u0142u math? Tak. Wystarczy u\u017cy\u0107 pot\u0119gi 1\/3. J\u0119zyk Kod Python x = 125print(x ** (1\/3)) Dlaczego wynik ma posta\u0107 5.0, a nie 5? Poniewa\u017c funkcje matematyczne zwykle zwracaj\u0105 typ float. Program traktuje wynik jako liczb\u0119 zmiennoprzecinkow\u0105. Kiedy u\u017cywa\u0107 cmath zamiast math? Gdy istnieje mo\u017cliwo\u015b\u0107 pracy z liczbami ujemnymi pod pierwiastkiem albo z pe\u0142n\u0105 arytmetyk\u0105 zespolon\u0105. Czy warto zaokr\u0105gla\u0107 wyniki? Tak, szczeg\u00f3lnie przy prezentacji u\u017cytkownikowi lub por\u00f3wnywaniu warto\u015bci. Surowa precyzja binarna cz\u0119sto utrudnia interpretacj\u0119. Kr\u00f3tkie zamkni\u0119cie tematu z punktu widzenia praktyki programistycznej Samo obliczenie pierwiastka jest proste, ale poprawne u\u017cycie tej operacji wymaga zrozumienia typ\u00f3w danych, precyzji oraz ogranicze\u0144 matematycznych. Najwi\u0119cej problem\u00f3w nie wynika z samego wzoru, tylko z za\u0142o\u017ce\u0144: liczba ujemna, por\u00f3wnanie float\u00f3w, b\u0142\u0119dny operator albo brak kontroli danych wej\u015bciowych. W codziennej pracy w\u0142a\u015bnie te drobiazgi zabieraj\u0105 najwi\u0119cej czasu. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1448,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,24],"tags":[],"class_list":["post-1447","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-programowania","category-kodowanie"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1447"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1447\/revisions"}],"predecessor-version":[{"id":1449,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1447\/revisions\/1449"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1448"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}