Mam trzy liczby typu uint16_t
: x
, y
, z
. Wartości którą mogą one przechowywać wahają się oczywiście od 0-65535
. Muszę w procku Atmega8 obliczyć coś takiego:
1/32 * (y - x) / (z - x) * 1000000
i teraz tak: wolałbym obliczać to stałoprzecinkowo bo jak powszechnie wiadomo z uwagi na to że atmega8 nie dysponuje jednostką zmiennoprzecinkową obliczenia takie na zmiennoprzecinkowych liczbach trwałyby o wiele dłużej nie mówiąc już o objętości kodu.
Proszę o zasugerowanie rozwiązania. Założenia są takie że wynik będzie z przedziału 0-40000 a znak wyniku ma być przechowywany w odrębnej zmiennej.
Zatem doszedłem już do oczywistej rzeczy że wynik obliczeń można wpierw ocenić czy wychodzi dodatni czy ujemny i do tej dodatkowej zmiennej zapisać kod znaku (szacowanie odbywa się porównując po prostu liczby z licznika i mianownika i na podstawie tego ustalić znak).
Jednak proszę o zasugerowanie rozwiązania na podstawie którego wynik nie byłby obarczony zbyt dużym błędem i tak aby zmusić procek do obliczania stałoprzecinkowego.
Jeśli wynik wyjdzie większy niż 40000 będzie traktowany i tak jako nieważny bo taki jest zakres dopuszczalnego wyniku.