Dokªadna arytmetyka liczb rzeczywistych w j zyku Python Marcin Ciura Zakªad Oprogramowania 28 marca 2007 Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 1 / 24
Plan referatu 1 Arytmetyka liczb rzeczywistych w j zyku Python 2 Przykªad zastosowania dokªadnej arytmetyki 3 Obliczanie leniwe 4 Uªamki ªa«cuchowe 5 Podstawowe operacje arytmetyczne na uªamkach ªa«cuchowych 6 Rozstrzyganie nierozstrzygalnego 7 Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych 8 Podsumowanie Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 2 / 24
Arytmetyka liczb rzeczywistych w j zyku Python Dost pne implementacje Arytmetyka zmiennoprzecinkowa: typ float, biblioteka standardowa math Arytmetyka staªoprzecinkowa: typ i biblioteka standardowa Decimal Arytmetyka wielokrotnej precyzji: biblioteka dodatkowa gmpy Wspólne cechy Obliczenia s szybkie Wyst puj bª dy zaokr gle«marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 3 / 24
Arytmetyka liczb rzeczywistych w j zyku Python Omawiana nowa implementacja Cechy Dokªadna arytmetyka: typ i biblioteka cf (od continued fractions uªamki ªa«cuchowe) Brak bª dów zaokr gle«nie za darmo: obliczenia s wolniejsze Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 4 / 24
Przykªad zastosowania dokªadnej arytmetyki Teoria chaosu Odwzorowanie logistyczne w przedziale (0, 1) x 0 = 0,671875 x n+1 = 4x n (1 x n ) Wyniki liczbowe n x n (dokªadne) x n (float) 0 0,671875 0,671875 1 0,8818359375 0,8818359375 2 0,416805267334 0,416805267334 3 0,972314545827 0,972314545827 Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 5 / 24
Przykªad zastosowania dokªadnej arytmetyki Wyniki liczbowe (c.d.) n x n (dokªadne) x n (float) 49 0,806174876108 0,804383930035 50 0,625027780961 0,629401692545 51 0,937472215952 0,933020807866 52 0,234472241082 0,249971919821 53 0,717980036976 0,749943836487 54 0,809938813921 0,750112314408 55 0,615751726501 0,749775320725 56 0,946406151249 0,750449156627 57 0,202886192510 0,74910087978 58 0,646893541595 0,751795006772 59 0,913689149751 0,746397098259 Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 6 / 24
Obliczanie leniwe (lazy evaluation) Zasada dziaªania Wykonuje si tylko tyle oblicze«, ile jest w danej chwili potrzebne (w odró»nieniu od obliczania gorliwego) Podczas tworzenia wyra»enia nie wykonuj si»adne obliczenia Potem mo»na wyci ga z wyra»enia tyle cyfr, ile si chce Podwyra»enia dynamicznie dopasowuj swoj dokªadno± tak,»e zawsze dostajemy prawidªowe cyfry wyniku Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 7 / 24
Uªamki ªa«cuchowe Algorytm Euklidesa 96 = 1 65 + 31 65 = 2 31 + 3 31 = 10 3 + 1 3 = 3 1 96 65 = 1 + 1 2 + 1 = [1; 2, 10, 3] 10 + 1 3 Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 8 / 24
Uªamki ªa«cuchowe Reprezentacja kanoniczna a = [a 0 ; a 1, a 2,..., a k ], gdzie ogniwo a 0 jest liczb caªkowit, a dalsze ogniwa a n s liczbami naturalnymi wi kszymi od 0 Niektóre wªasno±ci Liczbom wymiernym odpowiadaj sko«czone uªamki ªa«cuchowe, a niewymiernym niesko«czone uªamki ªa«cuchowe Obci cie uªamka ªa«cuchowego daje najlepsze mo»liwe przybli»enie liczby, np. dla π: 3, 22/7, 333/106, 355/113,... (Lochs) Dla prawie wszystkich liczb do przedstawienia n cyfr dziesi tnych potrzeba asymptotycznie 0,97027n ogniw, np. 1000 cyfr dziesi tnych π odpowiada 971 ogniwom Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 9 / 24
Uªamki ªa«cuchowe Przykªady rozwini liczb niewymiernych w uªamki ªa«cuchowe 2 = [1; 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,...] 2 = [ 2; 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,...] 3 = [1; 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,...] e = [2; 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8,...] e 1/2 = [1; 1, 1, 1, 5, 1, 1, 9, 1, 1, 13, 1,...] tan(1/2) = [0; 1, 1, 4, 1, 8, 1, 12, 1, 16, 1, 20,...] π = [3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1,...] 3 2 = [1; 3, 1, 5, 1, 1, 4, 1, 1, 8, 1, 14,...] Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 10 / 24
Podstawowe operacje arytmetyczne na uªamkach ªa«cuchowych Funkcja bihomograczna z = axy + bx + cy + d exy + f x + g y + h = a b c d e f g h Przypadki szczególne x + y = xy = 0xy + 1x + 1y + 0 0xy + 0x + 0y + 1 1xy + 0x 0y + 0 0xy + 0x + 0y + 1 x y = x/y = 0xy + 1x 1y + 0 0xy + 0x + 0y + 1 0xy + 1x 0y + 0 0xy + 0x + 1y + 0 Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 11 / 24
Podstawowe operacje arytmetyczne na uªamkach ªa«cuchowych Leniwe obliczanie ogniw funkcji bihomogracznej (Gosper) Je±li a e = b f = c g = d h = r, to emituj ogniwo r i zmie«e f g h warto±ci wspóªczynników na a er b fr c gr d hr W przeciwnym razie je±li b a > c a f e g e, to pobierz ogniwo p z x c + ap d + bp a b i zmie«warto±ci wspóªczynników na g + ep h + fp e f W przeciwnym razie pobierz ogniwo q z y i zmie«warto±ci b + aq a d + cq c wspóªczynników na f + eq e h + gq g Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 12 / 24
Rozstrzyganie nierozstrzygalnego Problem [1; 1, 2, 2, 4, 3, 3,...] [1; 1, 2, 2, 4, 3, 3,...]? Równo± liczb niewymiernych jest nierozstrzygalna w sko«czonej liczbie kroków Problem ten wyst puje, je±li argumenty operacji s niewymierne, a wynik jest prawdopodobnie wymierny Rozwi zanie Je±li algorytm Gospera wykonaª i max iteracji z jednakowymi warto±ciami a e, b f, c g i d h nie emituj c»adnego ogniwa, to emituje max ( a e, b f, c g, d ) h i (znak ko«ca uªamka ªa«cuchowego) Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 13 / 24
Rozstrzyganie nierozstrzygalnego Prawdopodobie«stwo bª du Je±li i max = 100, to na mocy twierdze«lochsa i Gaussa-Ku¹mina prawdopodobie«stwo omyªkowego obci cia uªamka ªa«cuchowego, który powinien by niesko«czony jest mniejsze ni» 1,5 10 31 liczba ogniw Wymierne warto±ci funkcji o argumentach niewymiernych Np. przy obliczaniu warto±ci cos π/3 albo ln e wyst puje analogiczny problem rozwi zanie jest podobne (nie omawiane w tym referacie) Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 14 / 24
Rozstrzyganie nierozstrzygalnego Prawie jak system algebry komputerowej >>> (sqrt(2) - 1)*(sqrt(2) + 1) 1. >>> sqrt(5 + 2*sqrt(6)) == sqrt(2) + sqrt(3) True >>> [sin(x)**2 + cos(x)**2 for x in... [pi*random(), pi*random(), pi*random()]] [1., 1., 1.] >>> [cos(3*x)/cos(x) == cos(x)**2-3*sin(x)**2 for x in... [pi*random(), pi*random(), pi*random()]] [True, True, True] Prosz spróbowa tego samego z typem float Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 15 / 24
Rozstrzyganie nierozstrzygalnego Prawie jak system algebry komputerowej (c.d.) >>> [x == x + cf(10)**-1000 for x in... [cf(random()), cf(random()), cf(random())]] [False, False, False] Ale tylko prawie >>> sqrt(2) == sqrt(2) + cf(10)**-1000 True Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 16 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Ró»ne niezb dne a proste funkcje Konstruktor, tworz cy uªamki ªa«cuchowe z liczb caªkowitych, zmiennoprzecinkowych i uªamków zwykªych Funkcje konwertuj ce uªamki ªa«cuchowe na liczby caªkowite, zmiennoprzecinkowe i napisy Oprócz czterech dziaªa«arytmetycznych równie» operator reszty z dzielenia % i operator zmiany znaku - Operatory porównania: <, <=, ==,!=, >=, > Funkcja warto±ci bezwzgl dnej abs() Jeszcze kilka pomniejszych funkcji Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 17 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych To»samo±ci sin x = cos x = ( ) / ( ) 2 tan x 1 + tan 2 x ( 2 ) / ( 2 ) 1 tan 2 x 1 + tan 2 x 2 2 arcsin x = arctan Podstawowe funkcje i π x 1 x 2 arccos x = π/2 arcsin x x y = e y ln x log 10 x = ln x/ ln 10 sqrt(), exp(), tan(), log(), atan(), pi Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 18 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Leniwe obliczanie pierwiastka kwadratowego Metoda Newtona (szybsza ni» x 1/2 = e (ln x)/2 ) a := caªkowitoliczbowe przybli»enie x Tak dªugo, jak ogniwa liczb a i x s równe, emituj je; a w przypadku ich nierówno±ci oblicz nast pne przybli»enie a := 1 2 Zbie»no± kwadratowa ( ) a + x a Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 19 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Leniwe obliczanie warto±ci funkcji e x Leniwie rozwijaj x w szereg Ostrogradskiego-Sierpi«skiego x = x + 1/q 1 1/q 2 + 1/q 3 1/q 4 +..., pami taj c dwie ostatnie sumy cz ±ciowe s k 1 i s k e 1/q = [1; q 1, 1, 1, 3q 1, 1, 1, 5q 1,...] e x+y = e x e y, e x y = e x /e y Tak dªugo, jak ogniwa liczb e s k 1 i e s k s równe, emituj je; w przypadku ich nierówno±ci oblicz nast pn sum cz ±ciow s k+1 Zbie»no± kwadratowa (w szeregu O-S q k > q 2 k 1 ) Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 20 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Leniwe obliczanie warto±ci tangensa Leniwie rozwijaj x w szereg Ostrogradskiego-Sierpi«skiego, pami taj c dwie ostatnie sumy cz ±ciowe s k 1 i s k tan(1/q) = [0; q 1, 1, 3q 2, 1, 5q 2, 1, 7q 2,...] tan x ± tan y tan(x ± y) = 1 tan x tan y Tak dªugo, jak ogniwa liczb tan s k 1 i tan s k s równe, emituj je; w przypadku ich nierówno±ci oblicz nast pn sum cz ±ciow s k+1 Zbie»no± kwadratowa Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 21 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Leniwe obliczanie warto±ci logarytmu naturalnego Leniwie znajduj sumy cz ±ciowe szeregu Ostrogradskiego-Sierpi«skiego tak,»eby e s k 1 < x e s k lub e s k 1 > x e s k Tak dªugo, jak ogniwa liczb s k 1 i s k s równe, emituj je; w przypadku ich nierówno±ci oblicz nast pn sum cz ±ciow s k+1 Zbie»no± kwadratowa Leniwe obliczanie warto±ci arcus tangensa Tak, jak logarytmu naturalnego, tylko z tan s k 1 i tan s k zamiast e s k 1 i e s k Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 22 / 24
Funkcje matematyczne operuj ce na uªamkach ªa«cuchowych Leniwe obliczanie warto±ci π Uogólniony uªamek ªa«cuchowy π = 3 + 6 + 6 + 1 9 25 6 + 49 6 + 81... Zbie»no± liniowa, ale ten algorytm okazaª si w praktyce szybszy od algorytmów o wy»szym rz dzie zbie»no±ci Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 23 / 24
Podsumowanie Wyniki praktyczne Dziaªaj ca biblioteka implementuj ca dokªadn arytmetyk liczb rzeczywistych Wyniki teoretyczne Nowe algorytmy obliczania warto±ci funkcji wykªadniczej, logarytmów oraz funkcji trygonometrycznych i cyklometrycznych uªamków ªa«cuchowych, oparte na rozwini ciu w szereg Ostrogradskiego-Sierpi«skiego Plany na przyszªo± Zaimplementowanie algorytmów w j zyku C++ Marcin Ciura (Zakªad Oprogramowania) Dokªadna arytmetyka liczb rzeczywistych 28 marca 2007 24 / 24