Vypocet podielu s PICkom

chodi to zle lebo

80 * 1000 je 80000 a to je predsa viac ako 32767. MCU vysledok jednoducho zarovna na dany typ a je to. Musite si konrolovat velkost cisel.

da sa to spravit nasledovne bez float


#define DELACA_KONSTATNA 100 // 100L moze byt pozadovane, aby prekladac vedel, ze konstatna bude pouzita pre vacsie cislo ako je bajtovy rozsah konstatny

int16_t  a, b, v; 
// medzivysledok sa spracovava v 32b integeri, co je vypoctovo daleko menej narocne ako vo floate.
int32_t c; 

a = 1000;
b = 80;

// premenne treba dosledne pretypovavat
c = (int32_t) a * (int32_t) b / 100;

// kontrola, ci vysledok nahodou nie je vacsi ako 16bit integer
if (c > INT16_MAX) c = INT16_MAX;

// premenne treba dosledne pretypovavat
v = (uint16_t) c;

pouzitie desatin v ramci integeru sa robi sposobom pevnej desatinnej ciarky a nie pohyblivej ako je to vo float. Jednoducho sa dohodnem, ze cislo 16234 znamena 162.34 a cislo 7589 znamena 75.89.