# Precisione dei numeri `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:


```python
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`:


```python
0.1 + 0.1 + 0.1 == 0.3
```

Se viene richiesta una precionse più alta si possono utilizzare due librerie diverse:

* [**decimal** — Decimal fixed point and floating point arithmetic](https://docs.python.org/3/library/decimal.html)
* [**fractions** — Rational numbers](https://docs.python.org/3/library/fractions.html)

Vediamo un esempio per la seconda libreria.


```python
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
```

# Divisione tra numeri interi
In python esistono due operatori per effettuare la divisione tra due numeri $a$ e $b$:

1. `\` effettua la divisione come una "normale" calcolatrice (a meno della precisione numerica)
2. `\\` viene chiamato il [floor division operator](https://docs.python.org/release/2.2.3/whatsnew/node7.html) ed effettua la divisione "intera", ovvero $\lfloor \frac{a}{b} \rfloor$


```python
a = 2.41
b = 2.42
print(a/b)
print(a//b)
print(b//a)
```

# Sympy: Matematica simbolica
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](https://peerj.com/articles/cs-103/) o direttamente la [documentazione della libreria](http://www.sympy.org/en/index.html).

Seguono un paio di esempi per rendere l'idea di cosa si può calcolare con Sympy.


```python
from sympy import *
x,y = symbols('x y')
init_printing(use_unicode=True)
```


```python
diff(sin(x)*exp(-x**2), x)
```


```python
integrate(cos(x), (x,0,3))
```

# Accesso al file system
Nel notebook è sempre possibile accedere al file system usando i commandi linux.

**ESEMPIO:**


```python
ls
```

     Volume in drive E is DATA
     Volume Serial Number is D299-FD79
    
     Directory of E:\GitHub\Programmazione2
    
    16/03/2017  10:54    <DIR>          .
    16/03/2017  10:54    <DIR>          ..
    16/03/2017  10:38               163 .gitignore
    14/03/2017  08:36    <DIR>          .ipynb_checkpoints
    09/03/2017  17:26             9,610 Appunti vari.ipynb
    16/03/2017  09:43    <DIR>          Assignments
    16/03/2017  10:14    <DIR>          data
    09/03/2017  17:08            19,558 Introduzione a Python - Parte seconda.ipynb
    16/03/2017  10:54            20,950 Introduzione a Python - Parte terza.ipynb
    09/03/2017  13:32            17,140 Introduzione a Python - Prima parte.ipynb
    14/03/2017  08:23            10,319 Lab 1 - Esercizi su semplici algoritmi numerici.ipynb
    09/03/2017  13:32             1,088 LICENSE
    09/03/2017  13:32               271 README.md
                   8 File(s)         79,099 bytes
                   5 Dir(s)  288,014,188,544 bytes free



```python
cd ..
```

    E:\GitHub



```python
cd Programmazione2/
```

    E:\GitHub\Programmazione2



```python

```

3edb77296fb29a81984c9e30036efa9873969c73
ipynb
Jupyter Notebook
Appunti vari.ipynb
karen013/https-github.com-mathcoding-Programmazione2
e77af58c24468e835347f5420f4ca007a0fd01c5
MIT
2017-03-14T22:58:03.000Z
2022-01-06T06:22:47.000Z
Appunti vari.ipynb
karen013/https-github.com-mathcoding-Programmazione2
e77af58c24468e835347f5420f4ca007a0fd01c5
MIT
Appunti vari.ipynb
karen013/https-github.com-mathcoding-Programmazione2
e77af58c24468e835347f5420f4ca007a0fd01c5
MIT
2017-03-09T15:49:55.000Z
2020-02-09T22:39:49.000Z
Qwen/Qwen-72B
1. YES
2. YES