Module matematice în Python zecimale și fracții

Chiar și operațiile matematice cele mai de bază pot da uneori un rezultat eronat. Acest lucru se întâmplă din cauza limitării stocării valorii exacte a unor numere. Puteți depăși aceste limitări utilizând modulul zecimal în Python. În mod similar, nici matematica nici cmath modul pe care l-am învățat în ultimul nostru tutorial ne poate ajuta să facem o aritmetică bazată pe fracție. Cu toate acestea, modulul de fracții din Python face exact acest lucru.

În acest tutorial, veți afla despre aceste module și despre diferitele funcții pe care le pun la dispoziție. 

De ce avem nevoie de un modul zecimal?

Probabil că vă întrebați de ce avem nevoie de un modul pentru a face aritmetică de bază cu numere zecimale atunci când putem face același lucru folosind flotoare.

Înainte de a răspunde la această întrebare, vreau să vă gândiți la valoarea de ieșire dacă tastați 0,1 + 0,2 în consola Python. Dacă ați ghicit că producția ar trebui să fie de 0,3, veți fi surprinși atunci când verificați rezultatul real, care este 0,30000000000000004. Puteți încerca un alt calcul cum ar fi 0,05 + 0,1 și veți obține 0.15000000000000002. 

Pentru a înțelege ce se întâmplă aici, încercați să reprezentați 1/3 în formă zecimală și veți observa că numărul este de fapt neterminat în baza 10. În mod similar, unele numere precum 0.1 sau 1/10 nu se termină în baza 2. Deoarece aceste numere trebuie încă să fie reprezentate într-un fel, câteva se fac aproximări în timpul stocării acestora, ceea ce duce la aceste erori.

Numărul 0.30000000000000004 este de fapt foarte aproape de 0.3, deci putem să scăpăm de această aproximare de cele mai multe ori. Din nefericire, această aproximare nu o va reduce atunci când simulezi lansarea unui satelit sau a face bani. O altă problemă cu aceste aproximări este că erorile se păstrează în sus. 

Pentru a obține rezultate precise precum cele cu care suntem obișnuiți să facem față când facem calculele manual, avem nevoie de ceva care să susțină o aritmetică rapidă, rotunjită corectă, zecimală cu punct de plutire, și zecimal modulul face exact asta.

Utilizarea modulului zecimal

Înainte de a utiliza modulul, trebuie să îl importați mai întâi. După aceasta, puteți crea zecimale din numere întregi, șiruri de caractere, plutitoare sau tuple. Atunci când zecimea este construită dintr-un întreg sau un float, există o conversie exactă a valorii acelui număr. Uitați-vă la exemplele de mai jos pentru a vedea ce vreau să spun:

din zecimal zecimal Decimal zecimal (121) # returneaza Decimal ('121') Decimal (0.05) # returneaza Decimal ('0.05000000000000000277555756') Decimal (' 3, 2, 4), -3)) # returnează zecimal ('8,324') zecimal ((1, 8, 3, 2, 4)

După cum puteți vedea, valoarea lui Decimal (0.05) este ușor diferită de Decimal ( '0.05'). Aceasta înseamnă că atunci când adăugați 0,05 și 0,1, ar trebui să utilizați decimal.Decimal ( '0.05') și decimal.Decimal ( '0.1') pentru a construi zecimalele.

din decimale zecimal Decimal zecimal ('0.05') + Decimal ('0.1') # returneaza Decimal ('0.15') Decimal (0.05) + Decimal (0.1) # returneaza Decimal ('0.1500000000000000083266726847')

Acum, că puteți efectua diverse operațiuni pe zecimale, este posibil să doriți să controlați precizia sau rotunjirea pentru aceste operații. Acest lucru se poate face folosind getcontext () funcţie. Această funcție vă permite să obțineți, precum și să setați valoarea opțiunilor de precizie și rotunjire, printre altele. 

Rețineți că atât rotunjirea cât și precizia intră în joc doar în timpul operațiilor aritmetice și nu în timpul creării zecimalelor.

import zecimal din importul zecimal Decimal, getcontext Decimal (1) / Decimal (13) # returnează Decimal ('0.07692307692307692307692307692') getcontext () prec = 10 Decimal (0.03) # returnează Decimal ('0.02999999999999999888977697537 ' (7) # returnează Decimal ('0.1428571429') getcontext () rotunjire = decimal.ROUND_DOWN Decimal (1) / Decimal (7) # returnează Decimal ('0.1428571428') 

Puteți utiliza, de asemenea, unele dintre funcțiile matematice cum ar fi sqrt (), exp (), și Buturuga() cu zecimale. Iată câteva exemple:

import zecimal din import zecimal Decimal, getcontext Decimal (2) .sqrt () # returnează Decimal ('1.414213562373095048801688724') getcontext () prec = 4 Decimal (' ('2000') log10 () # returnează zecimale ('3.301')

Utilizarea modulului de fracții

Uneori, s-ar putea să vă confruntați cu situații în care trebuie să efectuați diverse operații pe fracțiuni sau rezultatul final trebuie să fie o fracțiune. Modulul de fracțiuni poate fi de mare ajutor în aceste cazuri. Acesta vă permite să creați o Fracțiune exemplu de numere, plutitoare, zecimale și chiar siruri de caractere. La fel ca modulul zecimal, există și câteva probleme cu acest modul, atunci când vine vorba de crearea de fracții din plutitoare. Iată câteva exemple:

Fracția (11, 35) Fracția (10, 18) # returnează Fracțiunea (5, 9) Fracțiunea (8/25 ') # returnează Fracțiunea (8, 25) Fracțiunea (1.13) # returnează Fracțiunea (1272266894732165, 1125899906842624) Fracțiunea ('1.13') # returnează Fracțiunea (113, 100)

De asemenea, puteți efectua operații matematice simple cum ar fi adăugarea și scăderea pe fracții, la fel ca numerele obișnuite.

din fracții Fracțiunea Fractură (113, 100) + Fracțiunea (25, 18) # returnează Fracțiunea (2267, 900) Fracțiunea (18, Fracția (12, 5) * Fracția (16, 19) # returnează fracțiunea (288, 95) 10) # returnează 2.8592589556010197

Modulul are, de asemenea, câteva metode importante cum ar fi limit_denominator (max_denominator) care va găsi și va întoarce o fracțiune mai apropiată de valoare fracției date a cărei numitor este cel mult max_denominator. Puteți, de asemenea, să returnați numărul de numerar al unei fracții date în cel mai mic termen cu ajutorul funcției numărător proprietatea și numitorul folosind numitor proprietate.

din fracțiuni Fraction Fraction ('3.14159265358979323846') # returnează Fraction (157079632679489661923, 50000000000000000000) Fraction ('3.14159265358979323846') limit_denominator (10000) # returns Fraction (355, 113) Fraction ('3.14159265358979323846' Fracțiunea (311, 99) Fracțiunea ('3.14159265358979323846') limit_denominator (10) # returnează Fracțiunea (22, 7)

De asemenea, puteți utiliza acest modul cu diferite funcții în matematica module pentru a efectua calcule bazate pe fracții.

(fracție (25, 4)) # returnează 2.5 math.sqrt (Fraction (28,3)) # returnează 3.0550504633038935 math.floor (Fraction (3558, 1213) math.sin (math.pi / 3)) # returnează Fracțiunea (3900231685776981, 4503599627370496) Fraction (math.sin (math.pi / 3)) limit_denominator (10)

Gândurile finale

Aceste două module ar trebui să fie suficiente pentru a vă ajuta să efectuați operații comune atât pe zecimale, cât și pe fracții. După cum se arată în ultima secțiune, puteți folosi aceste module împreună cu modulul matematic pentru a calcula valoarea tuturor tipurilor de funcții matematice în formatul dorit.

În următorul tutorial al seriei, veți afla despre întâmplător modul în Python.

Cod