floats
A seguito di un paio di domande fatte a lezione, vediamo la precisione dei numeri "reali" in Python.
I float
in python corrispondono ai double
in C e quindi sono numeri in doppio precisione, e occupano in memoria 64 bits. Questo comporta un errore di precisione che deve essere considerato in quei ambiti in cui è richiesta un'alta precisione numerica. Per esempio, si dovrebbe ricordare che:
In [ ]:
0.1+0.1+0.1-0.3
ovvero la differenza non è nulla. Questo va considerato soprattutto quando si effetuano dei confronti tra due numeri float
:
In [ ]:
0.1 + 0.1 + 0.1 == 0.3
Se viene richiesta una precionse più alta si possono utilizzare due librerie diverse:
Vediamo un esempio per la seconda libreria.
In [ ]:
from fractions import Fraction
a = Fraction(1,10)
b = Fraction(1,10)
c = Fraction(1,10)
d = Fraction(3,10)
a + b + c - d == 0
In python esistono due operatori per effettuare la divisione tra due numeri $a$ e $b$:
\
effettua la divisione come una "normale" calcolatrice (a meno della precisione numerica)\\
viene chiamato il floor division operator ed effettua la divisione "intera", ovvero $\lfloor \frac{a}{b} \rfloor$
In [ ]:
a = 2.41
b = 2.42
print(a/b)
print(a//b)
print(b//a)
Sympy è una libreria Python per effettuare dei calcoli matematici simbolici. Per un approfondimento su come è stata sviluppata questa libreria si consiglia di leggere l'articolo SymPy: symbolic computing in Python o direttamente la documentazione della libreria.
Seguono un paio di esempi per rendere l'idea di cosa si può calcolare con Sympy.
In [ ]:
from sympy import *
x,y = symbols('x y')
init_printing(use_unicode=True)
In [ ]:
diff(sin(x)*exp(-x**2), x)
In [ ]:
integrate(cos(x), (x,0,3))
In [1]:
ls
In [2]:
cd ..
In [3]:
cd Programmazione2/
In [ ]: