Sto provando a calcolare una media mobile e per cercare di ottenere e ottimizzare un bit, ho semplificato il calcolo in modo che ci sia solo una divisione. Quando il valore diminuisce, c'è un punto in cui il valore corrente viene abbassato a un valore inferiore alla media. A questo punto i salti medi. Immagino che ciò avvenga perché la divisione non è firmata e il bit del mio numeratore è interpretato come un massiccio numero senza segno. Sono solo non sono sicuro di dove devo lanciare unsigned per assicurare che questo problema non riappaia.Divisione firmata con numeratore senza segno
unsigned int AverageUsage;
unsigned int TotalUsage;
unsigned int incCount;
AverageUsage = (TotalUsage - AverageUsage)/++incCount + AverageUsage;
AverageUsage sarà sempre positivo, ma quando scende al di sotto TotalUsage AverageUsage, io non sono sicuro di cosa aspettarmi con la divisione
AverageUsage = (signed int)(TotalUsage - AverageUsage)/++incCount + AverageUsage;
imposterà il numeratore di firmato, ma non sono sicuro come si verificherà la divisione.
AverageUsage = (signed int)((signed int)(TotalUsage - AverageUsage)/++incCount) + AverageUsage;
dovrebbe funzionare (posso garantire il risultato di questa piena operatività sarà mai essere negativo), ma sono preoccupato per i casi in cui incCount raggiunge un valore che 'sembra' negativo.
C'è una semplice soluzione a questo che si spera:
- non ha bisogno di un'istruzione if
- Non richiede QWords
Grazie!
Sarebbe utile se si includesse la dichiarazione di tutte queste variabili. Le regole di promozione di C dipendono dai tipi delle varie sotto-espressioni. Ad esempio, AverageUsage è un int? int unsigned? corto senza firma? ecc. – Nemo
Sono sospettoso di questo codice; sei sicuro che questo sia aritmeticamente corretto e calcoli una "media mobile" piuttosto che una "media cumulativa"? Una media mobile richiederebbe un buffer di "valori recenti". – Clifford
@Clifford. È un IIR di base. Probabilmente stai pensando a un FIR integratore-pettine; che è equivalente alla media campionaria statistica (in esecuzione/a rotazione). Indipendentemente da ciò, sono entrambi corretti; come filtri passa-basso e approssimazioni alla media della popolazione. –