Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Calcoli in virgola mobile versus calcoli in virgola fissa

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

4
voti

[1] Calcoli in virgola mobile versus calcoli in virgola fissa

Messaggioda Foto UtenteCandy » 30 mag 2016, 21:35

Nel mondo discreto ormai si programma in virgola mobile senza nemmeno pensarci sopra in molti sistemi, la stragrande maggioranza, con precisioni davvero elevate.
Tuttavia alle volte bisogna fare i conti con sistemi piu` limitati nelle prestazioni e possibilita` offerte. In questi casi, ancora oggi, bisogna saper fare bene anche in virgola fissa, quando i bit a disposizione sono in tutto 31 o 32.

Non e` la prima volta e non sara` questa l'ultima che devo risolvere problemi con calcoli in virgola fissa nel mondo discreto.
Per non perdere troppo in fatto di precisione, nei calcoli con rapporti tra variabili, cerco sempre di avere a numeratore numeri molto grandi, ed a denominatore numeri molto piccoli. Ma non e` sempre cosi`, non sempre e possibile farlo. C'e` il limite dei 32 bit, ed alle volte di devono dividere tra loro numeri con lo stesso ordine di grandezza, che danno un risultato parecchio deludente.

Ne ho gia` pensate e provate tante, e per tanto che mi sforzi, non riesco a risolverle tutte.
Ora, ragionavo tra me e me, i calcoli in virgola mobile, a parte poi il modo di memorizzarli, il processore in qualche modo li deve pur fare e, siccome in questo caso la precisione e` notevole, indipendentemente dal valore assoluto di numeratore e denominatore, ed ancora, siccome i calcoli in virgola mobile li fanno anche processori, (con le dovute lungaggini), che non implementano unita` aritmentiche a virgola mobile, mi domandavo infine come ci riescano quindi. Ovvero, mi domandavo se non esistaq qualche algoritmo a me sconosciuto ma facilmente implementabile, per migliorare i calcoli in virgola fissa.

Idee? COnsigli? SUGGErimenti? SOLUZIONI?!?
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[2] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto Utentelelerelele » 31 mag 2016, 15:00

per la mia pochissima esperienza, ho progettato una stazione barometrica, con tanto di sensore di pressione, e visto che c'ero l'ho dotata di calcolo dell'altitudine al livello del mare, (la metto in auto e mi diverto leggere i metri che salgono o scendono.....) :-)

il tutto con un microcontrollore da 8bit!

per la marea di calcoli fatti tutti senza virgola mobile, in alcuni casi ho moltiplicato un fattore (od entrambi per 100-1000, ecc) in modo da lavorare di fatto ad un calcolo senza virgola con precisione che reputo sufficiente, ed alla fine diviso per lo stesso coefficiente.

il thread su cui ho chiesto lumi per calcoli complessi, è questo: (ho visto che sei gia interventuo)
http://www.electroyou.it/forum/viewtopic.php?t=61702
e con le informazioni avute da Foto UtentePietroBaima che ringrazio sono riuscito anche ad evitare calcoli con virgole mobili ed esponenti.

saluti.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[3] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteCandy » 31 mag 2016, 15:38

Si, mi ricordavo. Io pensavo a qualcosa di piu' generico. Grazie.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[4] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto Utentepaofanello » 31 mag 2016, 15:49

Candy ha scritto:ormai si programma in virgola mobile senza nemmeno pensarci

Sono interessato alle risposte.
Mi ci sono scontrato anche io qualche giorno fa, la mia idea iniziale era di fare una metà dei calcoli (quelli più semplici) in virgola fissa, la restante metà (con radici, seni e potenze...) in virgola mobile.
Il problema è che poi le "due metà" si intrecciavano in altri calcoli e quindi diventava difficile:
- tenere conto dei coefficienti con cui avevo moltiplicato i numeri interi (per avere numeri alti)
- stare attento a riportare gli interi in virgola mobile o viceversa prima di "mischiarli"
- calcolare per ogni variabile il coefficiente moltiplicativo migliore per averla in virgola fissa senza perdere troppa precisione

Morale della favola ho portato tutti i calcoli in virgola mobile, naturalmente ne avevo la possibilità, ma la mia autostima ne ha risentito #-o
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.280 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

0
voti

[5] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteEcoTan » 31 mag 2016, 16:20

A me è capitato di leggere un segnale analogico con intervallo di tempo fisso.
Per tirare via un po' di rumore, supponiamo di filtrare con un filtro del primo ordine (tipo RC) con costante di tempo pari a 8 volte l'intervallo di lettura.
Ad ogni lettura calcoliamo (nuovo valore filtrato) =( 7 * (valore filtrato precedente) + (nuovo valore letto) ) / 8. (sbaglio??)
Succede che finché il nuovo valore letto non si discosta di almeno 8 digit dal valore filtrato precedente, quest'ultimo rimane permanentemente inchiodato anche se lo scostamento dura per un tempo comunque lungo.
Per evitare l'inconveniente mi sono ricordato che la divisione contempla anche un resto, quindi ogni volta calcolo il resto e lo cumulo in una variabile. Quando il cumulo dei resti supera 8 (o -8) aggiungo (o tolgo) un digit al valore filtrato e azzero il cumulo. Per me è intuitivo ma dovrebbe funzionare.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5421
Iscritto il: 29 gen 2014, 8:54

0
voti

[6] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto Utentelelerelele » 31 mag 2016, 16:26

anche io ho usato strategie del tipo, sempre che non sia vitale una notevole velocità.

A volte leggo l'ADC incrementando una variabile di 1 quando la lettura dell'ADC è superiore al mio valore medio, (contenuto nella variabile), oppure sottraggo 1, immuità molto elevata e velocità ridotta.

oppure ho caricato una serie di N° letture su un array, ad ogni ciclo tolgo l'ultimo numero ed inserisco quello letto, poi calcolo la media sommando tutti i valori e poi dividendo per N°.

magari esistono sistemi migliori di questo, ma non conoscendoli..... :roll:

saluti.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[7] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteSandroCalligaro » 31 mag 2016, 16:34

Parlando di metodi di uso abbastanza generale...
Niente di nuovo, ma magari menzionarlo risulta utile a qualcuno.

Nei sistemi di controllo (dove c'è un legame con grandezze fisiche, che sono naturalmente limitate in un certo range) si usa spesso la rappresentazione in "per unit" (p.u.), che altro non è che una scalatura che dipende dal tipo di grandezza in questione.
Una scelta opportuna dei "valori base", cioè dei valori corrispondenti a 1 p.u., per le varie grandezze, permette spesso di utilizzare le stesse equazioni che si utilizzano con le grandezze reali, o di racchiudere i fattori di scala necessari in alcune costanti comunque presenti.

L'implementazione di regolatori e di filtri, che capita di frequente, è delicata per il rischio di overflow (negli accumulatori) e/o per la possibilità di avere coefficienti piccoli (per i filtri, attenzione alle frequenze molto basse).

La possibilità di simulare è molto utile, anche se poi difficilmente l'effettiva implementazione è così fedele.
Con Matlab/Simulink avrei difficoltà a testare con certezza un'implementazione in C a virgola fissa.
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

0
voti

[8] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteDanteCpp » 31 mag 2016, 17:07

Candy ha scritto:siccome i calcoli in virgola mobile li fanno anche processori, (con le dovute lungaggini), che non implementano unita` aritmentiche a virgola mobile, mi domandavo infine come ci riescano quindi.


Ti domandi quindi come le fpu agiscono e se è possibile implementare questi algoritmi a livello software?
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[9] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteCandy » 2 giu 2016, 19:23

Generalizzo al massimo, rispetto a quelli che sono i miei dubbi. Fissiamo subito di dover lavorare in un sistema povero, discreto, con rappresentazione numerica a 31 bit piu` 1, in virgola fissa.

Soprattutto nel caso di una divisione tra due numeri, e' chiaro che il risultato ha una, in termini numerici, una perdita di precisione, ed in termini logici una riduzione del numero dei bit significativi.
Questo risultato usato poi altro da luogo a delle approssimazioni.

Come ho gia' accennato, ci sono varie strade percorribili per evitare il problema: moltiplicazione per costanti, ecc, che permettono di limitare la perdita, ma nei sistemi a 32 bit, a moltiplicare troppo, si sfora anche facilmente il limite numerico rappresentabile, con risultati a fine operazioni completamente privi di senso.

Quindi, mi domandavo se mai fosse stato risolto e come, un qualche modo di limitare i danni.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

1
voti

[10] Re: Calcoli in virgola mobile versus calcoli in virgola fiss

Messaggioda Foto UtenteSandroCalligaro » 2 giu 2016, 22:37

Una possibile via, sulla quale si dovrebbe trovare un po' di documentazione, è quella portata avanti da Texas Instruments con i calcoli in formato IQ.
Naturalmente dietro ogni metodo ci sono delle considerazioni sul range di valori che effettivamente può assumere una certa variabile.
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

Prossimo

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti