Przeszłam tę drogę kilka lat temu, kiedy musiałam zamienić kod odcisków palców od zmiennoprzecinkowego do stałego punktu. Twardymi częściami były DCT (który wykorzystywał duży stół cosinusowy) i logarytm o wysokiej precyzji. Zaskakująco niewiele znalazłem na drodze do istniejących bibliotek. Od tego czasu słyszałem, że oryginalna konsola Sony PlayStation (PS1) nie miała wsparcia zmiennoprzecinkowego, więc fora rozwojowe (fori?), Jeśli jeszcze istnieją, mogą mieć to, czego szukasz.
Niektóre osoby, z którymi pracowałem, miały szczęście w bibliotece NewMat, chociaż są nastawione raczej na algebrę liniową niż trygonometrię i wydają się skupiać na liczbach zmiennoprzecinkowych. Mimo to, jego strona prowadzi do this list, która wydaje się warta sprawdzenia. Znalazłem także bibliotekę przetwarzania sygnałów, która może być dobra do obsługi punktów stałych. I lata temu widziałem bibliotekę szablonów przetwarzania sygnału (sptl) od Fraunhofer. Myślę, że to zastrzeżenie, ale może być jakoś dostępne.
Wszystko, co jest powiedziane, myślę, że jesteś całkiem blisko z tym, co już masz. Ponieważ masz funkcję sinus, w zasadzie masz również funkcję cosinus, pod warunkiem, że odpowiednio przekształcisz dane wejściowe (cos(x) == sin(x + pi/2)
). Ponieważ styczna jest ilorazem sinusoidy i cosinusu (tan(x) = sin(x)/cos(x)
), jesteś w zasadzie tam dla trygonometrii.
Jeśli chodzi o wektory, to czy klasy wektorów STAR i valarraya w połączeniu z algorytmami STL również nie są zbyt blisko? Jeśli nie, zawsze jest Boost's math libraries.
Przykro mi, nie mogę wskazać ci srebrnej kuli, której szukasz, ale to, co próbujesz zrobić, jest raczej nietypowe w dzisiejszych czasach. Ludzie, którzy chcą precyzji, zwykle przechodzą od razu do liczby zmiennoprzecinkowej, która ma przyzwoitą wydajność na nowoczesnych procesorach i wiele bibliotek. Ci, którzy chcą prędkości na sprzęcie o ograniczonych zasobach, zwykle nie potrzebują precyzji i nie robią wyzwalania przez wektor i prawdopodobnie nie robią też C++. Myślę, że najlepszym wyjściem jest rzucenie własnego. Staraj się myśleć o tym, jak zastosować wzór wzoru koła w nowym kontekście, zamiast go na nowo wymyślać. :)
Jak to jest przybliżeniem grzechu? – TonyK
Szczerze mówiąc, nie wiem. Napisałem go rok temu w oparciu o przybliżenie sinusoidalne przy użyciu, zgaduję, pewnej funkcji parabolicznej. Po sporze na liczbę całkowitą, powyższe wyniki. Po zapomnieniu oryginalnej funkcji nie mam pojęcia, jak to działa. Rysuje jednak prawie idealny krąg. – porgarmingduod
Och, widzę to teraz. Aproksymuje on każdą połowę zakresu jako parabola z zerami o wartościach 0 i 2 oraz wartością maksymalną/minimalną +/- 1. Miły! – TonyK