2012-06-17 13 views
6

W C99 ich użyć mówi remquo:: zmniejszanie liczby argumentów?

Funkcje remquo są przeznaczone do wykonania redukcji argumentów, które może wykorzystywać kilka bitów bajtu iloraz. Zauważ, że x może być tak duża w stosunku do y, że dokładne odwzorowanie ilorazu nie jest praktyczne.

Co to jest "redukcja argumentów" w tym kontekście i jaki jest przykład takiego, który może wykorzystywać kilka mniej znaczących bitów ilorazu?

+0

Wydaje się, że mamy do czynienia z wydajnym obliczaniem funkcji transcendentalnych numerycznie poprzez "redukowanie" argumentu do mniejszego zakresu i korzystanie z wyszukiwań i interpolacji. Zobacz [te] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.123.9012&rep=rep1&type=pdf) [two] (http://www.imada.sdu.dk/~ kornerup/papers/RR2.pdf) papers. –

Odpowiedz

7

Redukcja argumentu oznacza odwzorowanie argumentu funkcji okresowej na okres kanoniczny (na przykład (-π, π) lub podobny) .Jeśli użyto π/2 jako dzielnika, niskie bity ilorazu będą pozwalającego na ustalenie właściwej znak/etc dla funkcji trygonometrycznych

Niestety, remquo jest bezużyteczny dla realizacji standardowego redukcji argumentów trygonometryczne, ponieważ π jest irracjonalne;.. redukujące duże argumenty modulo an zbliżenia z Õ który daje rezultaty z brak znaczących bitów, czyli wszystkie błędy

Jeśli jednak piszesz funkcję f(x) zdefiniowaną jako sin (πx) lub podobną, okres jest teraz dokładnie reprezentowany w postaci zmiennoprzecinkowej, a remquo może zrobić dokładnie to, czego potrzebujesz, natomiast wywołanie sin(2*M_PI*x) bezpośrednio da wyniki bez znaczących bitów (to znaczy wszystkie błędy), gdy x jest duży.

+2

Aby było jasne, prawidłowe implementacje remquo zwracają dokładne wyniki (bez błędu), biorąc pod uwagę argumenty, które są przekazywane. Powodem ograniczonego użycia argumentów trygonometrycznych jest to, że nie można przekazać wartości π bardziej precyzyjnie, niż można ją przedstawić w podwójnym (lub w długim podwójnym dla remolitu). Problem polega więc na wprowadzaniu danych, a nie na obliczaniu funkcji. –

+0

Rzeczywiście, to nie jest błąd w działaniu funkcji; Jest to podstawowe ograniczenie interfejsu, które czyni go bezużytecznym dla standardowych funkcji wyzwalania. –

Powiązane problemy