Witam wszystkich Mam takie pytanie do praktyków piszących w C dla rodziny AVR. Jak optymalnie przydzielać rozmiar zmiennej w przypadku mnożeń liczb. Podam na przykładzie
a=250; b=250; c=250 d=?
d=a*b*c;
No własnie, ile bitów przydzielić konkretnym zmiennym? D oczywiście musi być
32 bitowa, by pomieścić wynik, ale czy A i B i C mogą być 8 bitowe? Chodzi mi o sam proces obliczeń.Test w builderze oblicza prawidłowo to równanie, ale w AVR jak zrobiłem podobny przykład niestety dostałem śmieci. Ten przykład poniżej wyświetla mi 63236 zamiast spodziewanych 48800.
uint8_t x1,x2,x3,x4; uint16_t y1,y2,y3;
x1=250; x2=250; x3=128; x4=100;
y1=((x1*x2)/x3)*x4; wyswietl(128,30,y1);
Czy np. lewa zmienna działania musi pomieścić wynik działania? Np dla x1*x2, x1 musi być 16 bitowy? Jest jakaś regóła jakiej trzeba się trzymać? Czyli jak to robić optymalnie, bo zapewne mnożenie dwóch cyfr 16 bitowych jest znacznie szybsza od 32 bitowych, nie wspominając już o 8 bitach.
Kompilator to WinAVR ściagany może miesiac temu, wiec aktualny. Procesor to ATMEGA 128. Pamięci SRAM pod dostatkiem.
Pozdrawiam