Basics 3

Numeri Reali

Slide adattate da softpython

Premi esc per l'overview generale

1. Introduzione 1

I Numeri Reali

  • Anche chiamati numeri a virgola mobile
  • Il loro tipo è float
  • Python li salva in 64 bit di informazione (segno, esponente, mantissa)
  • Nota: bisogna usare il punto, non la virgola!

1. Introduzione 2

Notazione scientifica

  • Con la notazione scientifica, si scrive xen per rappresentare il numero x ⋅ 10n
  • In questo modo in memoria vengono memorizzate solo le cifre più significative e l'esponente
  • 75e1 -> 750.0
  • 75e2 -> 7500.0
  • 75e123 -> 7.5e+124
  • 75e0 -> 75.0
  • 75e-1 -> 7.5
  • 75e-2 -> 0.75
  • 75e-123 -> 7.5e-123

1. Introduzione 3

Il tuo turno!

  • Cerca di indovinare il risultato che producono le seguenti espressioni!
  • Esegui il codice per verificare!

1. Introduzione 4

1. Introduzione 5

2. Dettagli 1

Numeri troppo grandi o troppo piccoli

  • A volte i calcoli su numeri estremamente piccoli o enormi porta ai risultati:
    • math.nan
    • math.inf
  • Al momento li menzioniamo solo (maggiori dettagli: foglio di Numpy)

3. Esercizi 1-1

Esercizio - Cerchio

Calcola l'area di un cerchio al centro di un pallone da calcio (raggio = 9.15m).

Ricordati che area = pi * r2, e che l'operatore per la potenza è **

Il tuo codice dovrebbe stampare il risultato 263.02199094102605

3. Esercizi 1-2

Ricordiamo la precedenza degli operatori

Operatore Descrizione
** Potenza (massima precedenza)
+ - Più e meno unari
* / // % Moltiplicazione, divisione, divisione intera, modulo
+ - Addizione e sottrazione
<= < > >= Operatori di comparazione
== != Operatori di uguaglianza
not or and Operatori logici (minima precedenza)

3. Esercizi 2

Il giardiniere Jobe è diventato così bravo che il dottor Angelo decide di promuoverlo a curatore del campo da golf dove è solito trascorrere i weekend. Ma una nuova sfida lo attende: al campo Jobe deve radere perfettamente il green, cioè l’area circolare di raggio r che comprende la buca. La spia sul tagliaerbe di Jobe si deve accendere quando è posizionato sul verde chiaro.

Scrivi un espressione che date due coordinate x,y produce True quando il tagliaerbe è sul verde chiaro, e False altrimenti. Al solo scopo di darti dei riferimenti visuali, questa volta sul campo sono disposte anche delle palline con delle lettere.

  • Nota: questa volta l'origine è al centro del quadrato
  • NON usare il comando if
  • SUGGERIMENTO: ricordi come si calcola la distanza tra due punti? Ti servirà la radice quadrata math.sqrt
Immagine esercizio

Inserisci la tua espressione, usando x, y e r

Esercizio
Il campo da Golf

3. Esercizi 3

Esercizio - Frazionamento

Scrivi il codice per ottenere il valore della seguente formula

Immagine esercizio

per x = 0.000003

Dovresti ottenere 2.753278226511882

Inserisci la tua espressione, usando x

3. Esercizi 4

Esercizio - Sommatoria

Scrivi il codice per ottenere il valore della seguente espressione

Immagine esercizio
  • Non usare cicli
  • scrivi per esteso tutti i calcoli

Dovresti ottenere 20.53333333333333

Inserisci la tua soluzione, usando x

4. Conversioni 1

Reali - Conversioni

Per convertire da reale ad intero, abbiamo diversi metodi:

Funzione Descrizione Simbolo matematico Risultato
math.floor(x) Arrotonda x all'intero inferiore ⌊8,7⌋ 8
int(x) Arrotonda x all'intero inferiore ⌊8,7⌋ 8
math.ceil(x) Arrotonda x all'intero superiore ⌈5,3⌉ 6
round(x) Arrotonda x all'intero più vicino ⌊2.49⌉ 2
⌊2.51⌉ 3

4. Conversioni 2

Come prima, cerca di indovinare il risultato delle seguenti espressioni:

4. Conversioni 3

Domanda

Dato un qualsiasi float x, la seguente formula

math.floor(math.ceil(x)) == math.ceil(math.floor(x))

è:

  1. sempre True
  2. sempre False
  3. a volte True, a volte False (fornire gli esempi)

4. Conversioni 4

Domanda

Dato un qualsiasi float x, la seguente formula

math.floor(x) == -math.ceil(-x)

è:

  1. sempre True
  2. sempre False
  3. a volte True, a volte False (fornire gli esempi)

4. Conversioni 5

Esercizio

Gli studi eccessivi ti hanno portato a cercare su internet ricette di bevande energetiche. Fortunatamente, una guru della nutrizione ha appena postato sul suo canale Instagram @BeviCheTiFaBene la ricetta di un frappè portentoso:

Versare in un contenitore 2 decilitri di spremuta di kiwi, 4 decilitri di salsa di soia, e 3 decilitri di shampoo al karitè bio. Miscelare vigorosamente e poi versare metà del composto in un bicchiere. Rabboccare il bicchiere fino al decilitro intero superiore. Tracannare avidamente.

Corri a comprare gli ingredienti, e ti appresti a miscelarli. Hai a disposizione un misurino in cui travasi i preziosi fluidi, ad uno ad uno. Nell’effettuare il travaso, versi sempre un po’ più del necessario (ma mai più di 1 decilitro), e ad ogni ingrediente elimini poi l’eccesso.

  • NON usare sottrazioni, prova ad usare solo gli operatori di arrotondamento

4. Conversioni 6

Esempio

Dati:

kiwi = 2.4
soia = 4.8
shampoo = 3.1
misurino = 0.0
mixer = 0
bicchiere = 0.0

Il tuo codice deve stampare:

Verso nel misurino 2.4 dl di kiwi, tolgo eccesso fino a tenere 2 dl
Travaso nel mixer, adesso contiene 2 dl
Verso nel misurino 4.8 dl di soia, tolgo eccesso fino a tenere 4 dl
Travaso nel mixer, adesso contiene 6 dl
Verso nel misurino 3.1 dl di shampoo, tolgo eccesso fino a tenere 3 dl
Travaso nel mixer, adesso contiene 9 dl
Verso metà della miscela ( 4.5 dl ) nel bicchiere
Rabbocco il bicchiere fino al decilitro intero superiore, adesso contiene 5 dl

4. Conversioni 7

Inserisci la tua soluzione, usando x. Esegui il codice per verificare la sua correttezza

Verso nel misurino 2.4 dl di kiwi, tolgo eccesso fino a tenere 2 dl
Travaso nel mixer, adesso contiene 2 dl
Verso nel misurino 4.8 dl di soia, tolgo eccesso fino a tenere 4 dl
Travaso nel mixer, adesso contiene 6 dl
Verso nel misurino 3.1 dl di shampoo, tolgo eccesso fino a tenere 3 dl
Travaso nel mixer, adesso contiene 9 dl
Verso metà della miscela ( 4.5 dl ) nel bicchiere
Rabbocco il bicchiere fino al decilitro intero superiore, adesso contiene 5 dl

4. Conversioni 8

Esercizio - Arrotondamente

Scrivi il codice per ottenere il valore della seguente formula per x = -5.51

Dovresti ottenere 41

Immagine esercizio

Inserisci la tua soluzione, usando x

5. Uguaglianza 1

Errori di arrotondamento

  • Nei calcoli con virgola mobile, il processore può commettere errori di arrotondamento
  • I float sono memorizzati in codice binario a 64 bit
    (standard IEEE-754)
  • Ciò impone un limite fisico alla precisione!

5. Uguaglianza 2

Indaghiamo meglio...

  • Ma allora cosa succede quando eseguiamo operazioni aritmetiche con i floating point?
  • Il risultato è piuttosto diverso da quello atteso!

5. Uguaglianza 3

Uguaglianza tra reali

  • ATTENZIONE: EVITA IL == CON I FLOAT!
  • L'alternativa da preferire è verificare se un numero float è vicino ad un altro
  • math.isclose permette di fare ciò
    • precisione di default: 1e-09
    • override possibile tramite il parametro abs_tol

5. Uguaglianza 4

Domanda 1

Possiamo rappresentare perfettamente il numero 2 in un float?

5. Uguaglianza 5

Domanda 2

Quali di queste tre espressioni di codice danno lo stesso risultato?

5. Uguaglianza 6

Esercizio - Quadratica

Scrivi del codice che calcola gli zero dell’equazione ax2 - b = 0

Mostra i numeri con 20 cifre di precisione

Alla fine controlla che sostituendo il valore ottenuto di x nell'equazione si ottenga effettivamente zero.

Esempio. Dati:

a = 11.0
b = 3.3

Il tuo codice dovrà stampare:

11.0 * x**2 - 3.3 = 0  per x1 = 0.54772255750516607442
11.0 * x**2 - 3.3 = 0  per x2 = -0.54772255750516607442
0.54772255750516607442 è una soluzione? True
-0.54772255750516607442 è una soluzione? True

5. Uguaglianza 7

Inserisci la tua soluzione, usando a e b

11.0 * x**2 - 3.3 = 0  per x1 = 0.54772255750516607442
11.0 * x**2 - 3.3 = 0  per x2 = -0.54772255750516607442
0.54772255750516607442 è una soluzione? True
-0.54772255750516607442 è una soluzione? True

5. Uguaglianza 8

Stai già pensando alle prossime vacanze, ma c’è un problema: dove vai, se un selfie-stick non ce l’hai? Non puoi partire con questo grave turbamento: per uniformarti al fenomeno di massa devi comprare lo stick più simile agli altri. Conduci quindi prima un’indagine statistica tra turisti malati di selfie-stick con l’obiettivo di scoprire i brand più frequenti, in altre parole, la moda delle frequenze. Ottieni questi risultati:

b1,b2,b3,b4,b5 = 'TroppiLike', 'ErMejo United', 'Perditempo SpA', 'Vanità 3.0','TronistiPerCaso' # brand
f1,f2,f3,f4,f5 = 0.25, 0.3, 0.1, 0.05, 0.3   # frequenze (in percentuale)

Desumiamo quindi che le masse prediligono i selfie-stick dei brand 'ErMejo United' e 'TronistiPerCaso', entrambi a parimerito con un 30% di turisti ciascuno. Scrivi quindi del codice che stampa questo risultato:

TroppiLike è il più frequente? False ( 25.0 % )
ErMejo United è il più frequente? True ( 30.0 % )
Perditempo Inc è il più frequente? False ( 10.0 % )
Vanità 3.0 è il più frequente? False ( 5.0 % )
TronistiPerCaso è il più frequente? True ( 30.0 % )

ATTENZIONE: il tuo codice deve funzionare con QUALUNQUE serie di variabili!

Esercizio - Alla moda

6. Decimali 1

Numeri decimali

  • Se hai proprio bisogno di più precisione, Python offre Decimal
  • Possiamo crearlo partendo da una stringa
    • ATTENZIONE: se lo crei a partire da una costante, USA una stringa
    • Altrimenti, passando un float, perdi l'utilità dei Decimal
  • Operazioni tra Decimal producono altri Decimal

6. Decimali 2

Numeri decimali

  • Con i Decimal possiamo anche usare l'operatore di uguaglianza
  • Alcune funzioni matematiche sono inoltre supportate
  • Ma la memoria del computer è comunque finita! Con i Decimal hai solo un maggior numero di cifre per rappresentarli