Witam czy mógłbym poprosić o pomoc, próbuję stworzyć funkcję arctg dla AVR Atmega16
Czy można prosić jakiś działający prosty i szybki (dla procka) przykład funkcji arctg w C dla AVR.
Chce zaimplementować funkcję arctg(Y/X) która miałaby jako argument podawany już wyliczony iloraz dwóch zmiennych w postaci wyniku ze znakiem.
Domyślam się, że musiałbym wrzucać zmienne typu float (4,45)
bo arctg(4,45)
a arctg(445)
to zupełnie co innego.
Następnie chciałbym aby wynik po obliczeniu np. -78,45 był (wyliczony, ucinany lub zaokrąglany z rozdzielczością / dokładnością tylko do 1 stopnia)
... = 78^
dodam od siebie, że znalazłem coś takiego na necie:
tłumaczneie z eng:
"Szybka przybliżeniu arctan / atan funkcja
W poszukiwaniu szybkiego zbliżenia ArcTan natknąłem tej pracy:
"Efektywne przybliżenia dla Arcus tangens funkcja", Rajan, S. Sichun Wang Inkol, R. Joyal, A., maj 2006
Niestety nie mam dostępu do dokumentów (IEEE pomimo płacenia za rocznego członkostwa, co za żart ...), ale na szczęście papier pojawił się w książce, że Google ma do podglądu (dla wybranych stron), "Usprawnienie przetwarzania sygnału cyfrowego: a sztuczki z handlu przewodnika ". Jeszcze więcej szczęścia, Google miał ważnych stron na podglądzie. Przedstawiono 7 inny zbliżenia, każdy z różnym stopniem dokładności i złożoności.
Oto jeden algorytm Próbowałem, który ma zgłoszonego błędu maksymalna 0,0015 radianów (0,085944 stopni), najniższy błędów w pracy.
Poprawny zakres dla x jest między -1 i 1. Porównując powyżej standardowej funkcji atan C do 1.000.000 połączeń przy użyciu GCC daje
FastArcTan 17,315 [ms]
Standardowy C atan 60,708 [ms]
O 3x razy szybciej, bardzo dobre! "
Tu jest masowo opisane trochu po eng, ale ja tego jeszcze nie kumam :/
http://www.coranac.com/documents/arctangent/
z góry dziękuje za pomoc.
Czy można prosić jakiś działający prosty i szybki (dla procka) przykład funkcji arctg w C dla AVR.
Chce zaimplementować funkcję arctg(Y/X) która miałaby jako argument podawany już wyliczony iloraz dwóch zmiennych w postaci wyniku ze znakiem.
Domyślam się, że musiałbym wrzucać zmienne typu float (4,45)
bo arctg(4,45)
a arctg(445)
to zupełnie co innego.
Następnie chciałbym aby wynik po obliczeniu np. -78,45 był (wyliczony, ucinany lub zaokrąglany z rozdzielczością / dokładnością tylko do 1 stopnia)
... = 78^
dodam od siebie, że znalazłem coś takiego na necie:
Kod: C / C++
tłumaczneie z eng:
"Szybka przybliżeniu arctan / atan funkcja
W poszukiwaniu szybkiego zbliżenia ArcTan natknąłem tej pracy:
"Efektywne przybliżenia dla Arcus tangens funkcja", Rajan, S. Sichun Wang Inkol, R. Joyal, A., maj 2006
Niestety nie mam dostępu do dokumentów (IEEE pomimo płacenia za rocznego członkostwa, co za żart ...), ale na szczęście papier pojawił się w książce, że Google ma do podglądu (dla wybranych stron), "Usprawnienie przetwarzania sygnału cyfrowego: a sztuczki z handlu przewodnika ". Jeszcze więcej szczęścia, Google miał ważnych stron na podglądzie. Przedstawiono 7 inny zbliżenia, każdy z różnym stopniem dokładności i złożoności.
Oto jeden algorytm Próbowałem, który ma zgłoszonego błędu maksymalna 0,0015 radianów (0,085944 stopni), najniższy błędów w pracy.
Poprawny zakres dla x jest między -1 i 1. Porównując powyżej standardowej funkcji atan C do 1.000.000 połączeń przy użyciu GCC daje
FastArcTan 17,315 [ms]
Standardowy C atan 60,708 [ms]
O 3x razy szybciej, bardzo dobre! "
Tu jest masowo opisane trochu po eng, ale ja tego jeszcze nie kumam :/
http://www.coranac.com/documents/arctangent/
z góry dziękuje za pomoc.