Jak komputer oblicza wartość grzechu? Logicznie, kiedy o tym myślę, jedynym pozornym sposobem jest zapisanie wielu wartości grzechu w pamięci, a gdy wartość grzechu musi zostać „obliczona”, po prostu ściągnie dane z określonego adresu pamięci. (Np. Sin (x) wyciągnij dane z adresu pamięci zawierającego wartość sin (x)) Wydaje się, że to jedyny możliwy sposób, aby to zrobić. Czy jest funkcja, która może być użyta do obliczenia grzechu wartości? Naprawdę próbuję zapytać, jak komputer oblicza grzech na poziomie podstawowym. Czy istnieje sposób na przybliżenie wartości grzechu przy użyciu innej funkcji złożonej z bardziej „podstawowych” operacji, a ALU byłby w stanie wykonać wiele „podstawowych” operacji w celu przybliżenia wartości grzechu, czy może po prostu wyciąga wartości z pamięci?
źródło
<placeholder>
, Google „<placeholder>
algorytm obliczeniowy”. W większości przypadków działa lepiej niż w przypadku SE.Odpowiedzi:
Zazwyczaj funkcje sin (x) o wysokiej rozdzielczości byłyby implementowane za pomocą algorytmu CORDIC (COrdiate Rotation DIgital Computer), co można osiągnąć za pomocą niewielkiej liczby iteracji przy użyciu tylko przesunięć i dodawania / odejmowania oraz małej tabeli odnośników. Oryginalny papier CORDIC Computing Technika Jack Volder jest od 1959 roku działa również ładnie gdy realizowane ze sprzętem w FPGA (i podobny algorytm byłyby realizowane w FPU sprzętu dla tych Micros, które mają FPU).
W przypadku niższej rozdzielczości, na przykład w celu utworzenia zsyntetyzowanej fali sinusoidalnej dla falownika lub silnika VFD (przemiennik częstotliwości), tablica przeglądowa (LUT) z interpolacją lub bez niej działa dobrze. Konieczne jest tylko przechowywanie wartości dla jednej ćwiartki fali sinusoidalnej ze względu na symetrię.
Jak wskazuje @Temlib, algorytmy stosowane we współczesnych FPU wykorzystują redukcję zasięgu, a następnie ocenę za pomocą algorytmu Remeza w celu ograniczenia maksymalnego błędu bezwzględnego. Więcej można znaleźć w tym artykule Intela Formalna weryfikacja funkcji trygonometrycznych zmiennoprzecinkowych .
źródło
Większość komputerowych bibliotek wyzwalaczy opiera się na przybliżeniach wielomianowych , co zapewnia najlepszą równowagę między szybkością a dokładnością. Na przykład kilkanaście operacji mnożenia i dodawania / odejmowania wystarcza do uzyskania pełnej dokładności pojedynczej precyzji dla sinusu i cosinusa.
źródło