Resim takovou ulohu, ktera musi fungovat i na lowcost ARMech bez delicky, pripadne na ruznych jinych obskurnich procesorech. Par napadu mam, ale nic svetoborneho, jsou to spis takove "hacky" (bez č).
Mam tabulku o 16 ti sloupcich [0..15] a 2 radcich (prvni bereme jako hlavicku, pricemz v hlavicce jsou hodnoty po celem rozsahu rostouci - nebo klesajici). Dale mam C fci "int interpoluj(int x)" ktera najde mezi kterymi bunkami se moje hodnota x nachazi. Jsou 3 moznosti, bud' je hodnota nizsi nez hlavickatab[0] nebo vetsi nez hlavickatab[15] nebo je mezi nekterymi hodnotami hlavickatab[0..15]. Pro horni a dolni mez se spocita linearni fce pro prvni/posledni 2 prvky, pro hodnoty uvnitr tabulky se vezme linearni fce mezi danymi prvky tabulky a pres hodnotu (2. radek) se interpoluje vysledek. Alternativne u meznich hodnot se vezmou jen ty mezni hodnoty jako "overflow". Snad to je pochopitelne, jde napr. o jednoduchou prevodni tabulku nejakeho nelinearniho senzoru, ktery je po castech linearizovan (treba termistor NTC).
Druha varianta je, kdy je tato tabulka dvojrozmerna, 16x16, tam vznika problem, ze interpoluju ve 2D poli (x-y). Je to vcelku trivialni uloha, mame-li operace mul-div.
A ted prichazi slozitejsi varianta se kterou si moc nevim rady - jak toto realizovat VELICE rychle (klidne se ztratou presnosti, ale obecne pouzitelne pro ruzne varianty) na procesoru ktery mul-div nema, abych pouzival jen +- or xor shl shr, pripadne maximalne mul ? Rekneme nejaka 8051 ci PIC16 jako etalon hodne hloupeho procesoru. Muj jediny rozumny napad je, kdy si treba urcim rozdil hodnot mezi sousednimi bunkami a pracuji treba jen s N bity na ktere pocitam (vse v mocninach 2), tzn. hlavne tam dochazi k shiftovani.
Presne takove tabulky jsou pouzivane pri rizeni spalovacich motoru, bohuzel vzdy tam je procesor ktery muldev umi, takze jsem se nemohl inspirovat. U starych ridicich jednotek (pred rokem 1996) se vetsinou pouzivala 8051 a tam se interpolace neresi.