From 138f54f56f66d3511716bf3be2db142318ab76e9 Mon Sep 17 00:00:00 2001 From: mc-cat-tty <44820563+mc-cat-tty@users.noreply.github.com> Date: Tue, 2 Nov 2021 12:17:44 +0100 Subject: [PATCH] fine lezione 11 --- .12_float_double.md.swp | Bin 0 -> 16384 bytes 12_float_double.md | 86 ++++++++++++++++++++++++++++++ esercitazioni/.ascensore.cpp.swp | Bin 0 -> 12288 bytes esercitazioni/ascensore.cpp | 49 +++++++++++++++++ esercitazioni/div_reale2.cpp | 9 ++++ esercitazioni/divisione_reale.cpp | 11 ++++ esercitazioni/reale_int.cpp | 11 ++++ esercitazioni/rsa/a.out | Bin 0 -> 17944 bytes "\303\271" | 51 ++++++++++++++++++ 9 files changed, 217 insertions(+) create mode 100644 .12_float_double.md.swp create mode 100644 12_float_double.md create mode 100644 esercitazioni/.ascensore.cpp.swp create mode 100644 esercitazioni/ascensore.cpp create mode 100644 esercitazioni/div_reale2.cpp create mode 100644 esercitazioni/divisione_reale.cpp create mode 100644 esercitazioni/reale_int.cpp create mode 100755 esercitazioni/rsa/a.out create mode 100644 "\303\271" diff --git a/.12_float_double.md.swp b/.12_float_double.md.swp new file mode 100644 index 0000000000000000000000000000000000000000..30be0bacd097657e56f7ce5ee4ad40bb76412ba1 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/12_float_double.md b/12_float_double.md new file mode 100644 index 0000000..cec56d6 --- /dev/null +++ b/12_float_double.md @@ -0,0 +1,86 @@ +# Float and double +Numeri con componenti frazionari. Comunemente chiamati reali, ma nella realtà + +## Notazione scientifica +`2.4e2` => 2.4 * 10^2 +Funziona sia per gli esponenti negativi che per quelli positivi + +## Letterali reali +Per inidcare che una costante lettereale è da inerpretare come reale, è necessario porre un punto alla fine di essa, indipendentemetne dalla presenza della parte decimale. `102.` + +## Downcast e upcast +Downcast -> perdita di informazioni +Upcast -> eg: da int a float + +## Stampa numeri reali +Il numero stampato su stdout da cout potrebbe non coincidere con il numero presente in memoria. I numeri reali vengono stampati con un ragionevole numero di cifre dopo la virgola. + +## Rappresentazione in memoria +- virgola fissa +- virgola mobile: ho un limite massimo di cifre significative che posso rappresentare e sposto la virgola in base al valore della parte decimale + +### Componenti in virgola mobile +- segno +- mantissa (_significand_): cifre del numero (intere e decimali) +- esponente in base 10: indica la posizione della virgola + +Il numero si immagina nella forma: mantissa\*10^esponente + +La posizione iniziale della virgola si trova al terzo posto a partire da destra. + +Esponente: +- positivo: spostamento della virgola di n cifre verso destra +- negativo: spostamento virgola verso sinistra + +## Float vs double +Entrambi vengono rappresentati in virgola mobile +Sottoinsieme dei numeri reali -> sono un'approssimazione sia come range di valori rappresentabili che come numero di cifre contenuto nella mantissa + +I numeri periodici vengono approssimati + +## Manipolatore `setprecision` +=> setta un numero massimo di cifre per un numero in virgola mobile +`#include ` +L'istruzione `setprecision()` ha un effetto permanente + +TODO: vedi divisione_reale.cpp + +Approssimazione migliore del tipo double: 16esima cifra dopo la virgola + +## Standard IEEE754 +=> definisce la rappresentazione tipica di float e double. + +Memorizzazione esponente: si potrebbe utilizzare il complemento a due, ma è stao deciso di usare un offset => esponente = _num-offset_ -> viene memorizzato num + +La prima cifra della mantissa deve sempre essere diversa da zero -> siamo in base 2, quindi è uguale a 1. Questo permette di evitare la memorizzazione degli zeri anteposti al numero. +Siamo arrivati ad un numero nella forma 1.xxxxx -> non è necessario memorizzare l'1, basta xxxxx + +Valore minimo: -offset se num=0 +Valore massimo: tutti i bit a 1 +Zero: se num=offset + +TODO: vedi ieee754 floating point converter + +## Conversion +Per ogni cifra binaria a destra della virgola il valore decimale viene dimezzato + +## Precisione +=> La precisione P di un dato tipo di dato numerico viene definita come il numero massimo di cifre (in base b) tali che, qualsiasi numero rappresentato su P cifre, è rappresentabile in modo esatto dal tipo di dato. + +Tipicamente il float (4 byte) hanno un precisione di 6 cifre decimali, mentre il double (8 byte) ne ha 15. Inoltre esistono i long double, che occupano 10 byte in memoria. + +=> la precisione è data dal numero di bit (in base 2) memorizzabili nella mantissa + 1 (bit non memorizzato). Eg. la precisione in base 2 degli interi è 31 (ricorda bit segno) + +## Memorizzare numeri > 1 in float/double +È possibile memorizzare numeri maggiori di 1 utilizzando l'esponente, ma non possiamo essere sicuri che le cife dopo la P-esima siano corrette (assimilate a zeri) +=> questo problema prende il nome di *troncamento* -> necessario per memorizzazione + +## Memorizzazione di numeri non scrivibili come somma degli inversi delle potenze di 2 +=> numeri come 0.1 non possono essere rappresentati in modo corretto sulla macchina + +## Operazioni miste +=> In un'operazione ad operatori misti basta che uno sia ti tipo reale che il risultato diventa reale +-> upcast (il compilatore "alza" il tipo di dato) + +## Rappresentazione dello zero +La mantissa, per definizione ha la prima cifra diversa da zero, quindi 0 non sarebbe rappresentabile -> se tutti i bit sono esattamente a zero, il numero complessivo è considerato come zero. diff --git a/esercitazioni/.ascensore.cpp.swp b/esercitazioni/.ascensore.cpp.swp new file mode 100644 index 0000000000000000000000000000000000000000..5e36be429b98a8cc86da7d446b1269ac4f04e459 GIT binary patch literal 12288 zcmeI2&x;&I6vr#x#$?x^M@e{@ggCRaJKeK6DDzAFv0!l5l?1&mH9fVnMY^k+`mvE& zR>?u|tl-I$c!+1wgGcwSphs^3PkQkW5d79m&t?o{10DiOHGHY=s`p;M_o=RdW#1@$ z|K<+8(%xjaE;4rM@;!bjxxlVnV{G4Wl?j{auy)4vmdNub*#!3wPXi`z3VX-tGT~+E zm6Lm=(G$aqf={JZVy}}3D@-Qc>{%wsRYn z=!NIsd%S5}i3B2nNFWl31R{Y*AQFfKB7y%M0au=5AEByes>(XmcoW4}Dh*f-~qJpTW``1}8_=NS7L`U(0G`X2fk zx(|H@eF}X5-G#QHx1k}_g8o=#?04t^bOQYVeFc39eF1$8ZG~}#vD?r#bQxNO&O?7* zVC*;O0dxX=2Yn8G0^Nf+gcb$XhF*j&LaWdU^egK477F!rLrw9D1R{Y*AQFfKB7sOC z5{Lx;C4pmBGs5|5Fp3nls4}XLcNcah1qog z8Bz)kfYGIi^l*X0zBbg5%8?wTJ(7JsvJKV5U8~i^y2z~vX7jiko1yfY+(+5{l&)VV z%x^SQ(n*`t9}w1qQ)RtmJX{#JD&ygR=C&};BvKoa3ZXOY9rgQE-_eJ%5X$K;)q6Fp zEG-H(&S%M=THltLH=3;DS;mbZY|Oq_vK~S$tQV!6I=!P6NIlsxl-mdZhSX`N8=|x_ zhwHq0>W9fzHQ8(uB?-N|b?fFEyW6|nzz1?hj7EYKyo5#bw7|ff zm;A)@NiMmXaw@&y>r|rQ`rza~9ZI248hkZ*MVVI4Xf$}!NV;G&8=c`KN%=w;*#@?d z(5>Cqx3_j)>k@3I0;obR^JoTr-Ucn*%5g-+UKDz)2~(N0dU;PmEf0CZ=7?cekb`wp z9h?Q50d>U2%i)_0pO)&)sLV3LCLzwebU9zn4uWA7A-n|Nb9?TBCpkZbQsIV&1J~M2 zsSwUc8uJ`qGtO_5g(9sp-Z}8Xf|D$~x!_VYW~cYe1HW|K!$A_rbm<4+$olngV2-im z!_gvzowFs+@B`w;n7t}hmiw`wepYaIFkG6DDAovG3>jNX*cxrkdgoCS)lVDe$)dmh TkUMN!QS#{&t@U-5tg*iV&vn8{ literal 0 HcmV?d00001 diff --git a/esercitazioni/ascensore.cpp b/esercitazioni/ascensore.cpp new file mode 100644 index 0000000..1a92fee --- /dev/null +++ b/esercitazioni/ascensore.cpp @@ -0,0 +1,49 @@ +/* +* Esercizio "ascensore sgravata impazzita" +*/ + +#include +#include + +using namespace std; + +enum direzione {su, giu}; + +double singolo_impulso(double, direzione); + +int main() { + // struttura dati + double pos = 0.; // posizione iniziale (+20 metri dal suolo) + + int ch; + int n; // numero spostamenti + + const double epsilon = 1e-7; + + do { + cout << pos << endl; + // PROBLEMA: lo zero non viene rappresentato in modo preciso; + if ((pos > 1.0-epsilon && pos < 1.0+epsilon)) // PERICOLO: pos potrebbe non essere esattamente a 1. Non usare l'uguaglianza pura, perchè viene fatto un controllo bit per bit tra i numeri. + cout << "Non sicuro staccare le funi" << endl; + else + cout << "Sicuro staccare le funi" << endl; + cout << endl; + + cout << "Movimento: "; + cin >> n; + + if (n>0 && pos+(n/10) >= 20) + pos = 20; + if (n<0 && pos-(n/10) <= -20) + pos = -20; + else + for (int i=0; i 0 ? su : giu); + + } while (n != 0); + return 0; +} + +double singolo_impulso(double n, direzione dir) { + return n + (dir == su ? 0.1 : -0.1); +} diff --git a/esercitazioni/div_reale2.cpp b/esercitazioni/div_reale2.cpp new file mode 100644 index 0000000..faf7022 --- /dev/null +++ b/esercitazioni/div_reale2.cpp @@ -0,0 +1,9 @@ +#include +using namespace std; + +int main() { + int a, b; + cin >> a >> b; + cout << a/b << endl; + cout << static_cast(a)/b << endl; +} diff --git a/esercitazioni/divisione_reale.cpp b/esercitazioni/divisione_reale.cpp new file mode 100644 index 0000000..da04b43 --- /dev/null +++ b/esercitazioni/divisione_reale.cpp @@ -0,0 +1,11 @@ +#include +#include + +using namespace std; + +int main() { + float a=2, b=3; + double x=2, y=3; + cout << setprecision(20) << a/b << endl; + cout << x/y << endl; +} diff --git a/esercitazioni/reale_int.cpp b/esercitazioni/reale_int.cpp new file mode 100644 index 0000000..dd56594 --- /dev/null +++ b/esercitazioni/reale_int.cpp @@ -0,0 +1,11 @@ +#include +using namespace std; + +int main() { + float a; + int b; + cin >> a; + b = static_cast(a); + cout << a << endl; + cout << b << endl; +} diff --git a/esercitazioni/rsa/a.out b/esercitazioni/rsa/a.out new file mode 100755 index 0000000000000000000000000000000000000000..d7e5a752c76b64c77e635257a771e9e32641770a GIT binary patch literal 17944 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 literal 0 HcmV?d00001 diff --git "a/\303\271" "b/\303\271" new file mode 100644 index 0000000..6809bf2 --- /dev/null +++ "b/\303\271" @@ -0,0 +1,51 @@ +# Float and double +Numeri con componenti frazionari. Comunemente chiamati reali, ma nella realtà + +## Notazione scientifica +`2.4e2` => 2.4 * 10^2 +Funziona sia per gli esponenti negativi che per quelli positivi + +## Letterali reali +Per inidcare che una costante lettereale è da inerpretare come reale, è necessario porre un punto alla fine di essa, indipendentemetne dalla presenza della parte decimale. `102.` + +## Downcast e upcast +Downcast -> perdita di informazioni +Upcast -> eg: da int a float + +## Stampa numeri reali +Il numero stampato su stdout da cout potrebbe non coincidere con il numero presente in memoria. I numeri reali vengono stampati con un ragionevole numero di cifre dopo la virgola. + +## Rappresentazione in memoria +- virgola fissa +- virgola mobile: ho un limite massimo di cifre significative che posso rappresentare e sposto la virgola in base al valore della parte decimale + +### Componenti in virgola mobile +- segno +- mantissa (_significand_): cifre del numero (intere e decimali) +- esponente in base 10: indica la posizione della virgola + +Il numero si immagina nella forma: mantissa\*10^esponente + +La posizione iniziale della virgola si trova al terzo posto a partire da destra. + +Esponente: +- positivo: spostamento della virgola di n cifre verso destra +- negativo: spostamento virgola verso sinistra + +## Float vs double +Entrambi vengono rappresentati in virgola mobile +Sottoinsieme dei numeri reali -> sono un'approssimazione sia come range di valori rappresentabili che come numero di cifre contenuto nella mantissa + +I numeri periodici vengono approssimati + +## Manipolatore `setprecision` +=> setta un numero massimo di cifre per un numero in virgola mobile +`#include ` +L'istruzione `setprecision()` ha un effetto permanente + +TODO: vedi divisione_reale.cpp + +Approssimazione migliore del tipo double: 16esima cifra dopo la virgola + +## Standard IEEE754 +=> definisce la rappresentazione tipica di float e double.