Výpočet hodnoty úhlu (arcsinus)

Ahoj,
řeším problém s vyjadřováním úhlu náklonu podle dat z akcelerometru. Moje úvaha je, že mám-li akcelerometr nastavený na rozsah 1g, pak data z jednotlivých os znamenají sinus úhlu náklonu osy. Z toho se teoreticky dá dopočítat úhel náklonu.
Šel jsem cestou Taylorovy řady pro arcsinus. Problém je, že někde u sinx=0,9 to začíná být nepřípustně nepřesné (alespoň tedy s přijatelným počtem polynomů).
V kalkulačkách to musí být určitě nějak vyřešeno. Nemyslím si, že by kalkulačky používaly 32-bit logiku, takže na to musí být nějaká vychytávka.
Napadlo mě jen rozsah rozsekat na menší díly a dopočítávat k nim fixní korekce, abych dosáhl trochu lineárnější přesnosti.

Chtěl bych to zrealizovat na platformě Xmega, která by mi měla poskytnout možnost 16-bit operací a desetiných čísel.

Od 0.7 počítat pi/2-arccos, aby to rychleji konvergovalo. Myslím že se používají upravené vrozce které konvergují ještě rychleji než běžná řada. Ale na to se bude dát určitě najít na netu spousty hotových knihoven.

Při hledání tohohle výrazu (kvůli těm rychlejší variantám) jsem narazil na algoritmus CORDIC. Ale úplně jsem ho nepochopil. Zdá se být ale docela funkční, tak zkusím ještě pohledat.
Kdyžtak kdyby měl někdo nějaké polopatické vysvětlení, byl bych moc rád.

Avr-gcc má funkci acos() v knihovně <math.h>.

Jde z toho nějak vytáhnout assembler rutina, abych to nemusel kompilovat a pak zase dekompilovat do AVRASM?

Jde, ale je to složitější než si asi představuješ.

Kdysi jsem dělal v assembleru 8086 (program DOS Manažer) kalkulátor s neomezenou přesností, nepomohlo by to pro inspiraci? Řada se počítá pro interval 0 až 0.5, pro větší hodnotu se výpočet převede na opačnou funkci (arcsin <-> arccos), tj. sqrt(1-x^2) a pi-y.
ZVL1.ASM (12.4 KB)

Ahoj. Poměrně podrobné informace o algoritmu CORDIC se nacházejí na webu, na stránkách www.root.cz. Jsou součástí velmi zajímavého seriálu pojednávajícího o pevné řádové čárce, doporučuju přečíst.

root.cz/serialy/fixed-point-arithmetic/