Oto funkcja, którą przerobiłem z pewnego szeregu na Sinus dowolnego argumentu:
FUNCTION Sinus(k:Currency):Currency;
BEGIN
RESULT:=k - ((kkk)/(123)) + ((kkkkk)/(12345)) - ((kkkkkkk)/(1234567)) + ((kkkkkkkkk)/(123456789));
END;
Jak widać, jest to szereg z ciągle zwiększającą się potęgą i silnią - łatwo zauważyć -zatem każdy samemu może zwiększyć jej dokładność.
Po co takie coś? - a nuż gdzieś nie można zastosować "sinusa", to jak znalazł. Zresztą nie wiem, czy każdy język ma funckje trygonometryczne, bo jeśli nie - to już ma:))
"K" jest argumentem sinusa wyrażony w radianach. (Np. Pi/2 to 1,57). Testowałem tę funkcję dla różnych kątów i okazało się, że mi się idało wyśmienicie, bo:
- rzeczywiście zwraca wartość sinusa podanego kąta, ale....
...ale nie działa dla kątów dużych. Już przy kącie 6,28 (2*Pi), miałem dziwne wyniki, dla małych kątów natomiast - wyśmienicie.
Czy ktoś wie jak przerobić tę funkcję, żeby działała prawidłowo?
PS: A tu funkcja dla Cosinusa :
FUNCTION Cosinus(k:Currency):Currency;
BEGIN
RESULT:=1 - ((kk)/(12)) + ((kkkk)/(1234)) - ((kkkkkk)/(123456)) + ((kkkkkkkk)/(12345678)) - ((kkkkkkkkkk)/(12345678910));
END;
Usterki zanotowałem te same co w pierwszej. Proszę o opinię - czy mam coś źle (męczyłem się trochę nad tą funkcją - nie ma co.... :)