PROMOS fórum

FRED - grafické vývojové prostředí => FRED - platforma PL2 (CCPU) => Téma založeno: libor 26.06.2012, 12:02:40



Název: Arccos
Přispěvatel: libor 26.06.2012, 12:02:40
Potřeboval bych k výpočtu objemu kapaliny v nádobě (položený válec), kde se měří výška hladiny, funkci arccos. V modulu Compute jsem našel pouze arctan (atan). Lze nějak na CCPU-03 spočítat arccos?


Dotaz zákazníka (viz výzva (http://forum.elsaco.cz/index.php?topic=13.msg112#msg112)).


Název: Re: Arccos
Přispěvatel: libor 26.06.2012, 12:20:39
Pro výpočet Arccos lze využít minimálně 2 metody. Buď pomocí rozvoje nebo pomocí funkce Arctan, kterou PL2 umí.

První varianta je popsána na anglické verzi Wikipedie (http://en.wikipedia.org/wiki/Inverse_trigonometric_function). Jedná se o rozvoj (viz příloha), od kterého spočítáme prvních pár členů. Výsledek je vidět na obrázku a v přiložené projektu.

Druhou možností je výpočet přes Arctan:
Kód:
Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + PI / 2

Tuto možnost opět vidíte na obrázku a v přiloženém projektu.



První varianta je v krajních polohách (okolo 0.95 a -0.95) nepřesná, ale je stabilní.

Druhá varianta je přesnější i v krajích, ale je nestabilní v krajních bodech 1.0 a -1.0 (nejspíš to souvisí s přesností výpočtu pomocí 4 bajtových floatů). Druhou vraintu je proto potřeba používat pouze v rozmezích <-0.99, 0.99>.