162 TIF

162 TIF



Przeprowadzenie niektórych obliczeń zabiera bardzo dużo czasu. Na przykład Pentium ma wbudowane instrukcje obliczające funkcje trygonometryczne, a mimo to ich wykonanie jest dość czasochłonne. Uruchomienie własnych algorytmów może być jeszcze mniej korzystne czasowo.

Jeśli szybkość wykonania jest ważniejsza niż dokładność obliczeń, to dobrze jest rozważyć użycie tabeli wartości. W tym celu najpierw wypełniamy tablicę wcześniej obliczonymi wartościami danej funkcji dla różnych argumentów. Gdy potrzebujemy wyniku dla konkretnego argumentu, wówczas szukamy w tabeli wartości funkcji dla najbliższego argumentu.

Załóżmy na przykład, że tworzymy tabelę wartości dla funkcji sinus. Ponieważ wiemy, że funkcja ta jest cykliczna, musimy znaleźć wartości tylko dla argumentów z przedziału od 0 do 2iz. Powiedzmy, że tworzymy tablicę o rozmiarze 100. Wypełniamy ją więc wartościami funkcji sinus, poczynając od 0 radianów i zwiększając argument co 2n/100 radianów. Gdy potrzebujemy wartości sinusa dla konkretnego kąta, wówczas znajdujemy w tabeli wartość funkcji dla kąta najbliższego.

W kodzie źródłowym utworzyliśmy tabelę wartości dla funkcji sin i cos. Użyliśmy też funkcji sin i cos z biblioteki CRT oraz funkcji wbudowanych.

Zwycięzcą zostaje oczywiście tabela wartości. Szybkość obliczania w tym kodzie funkcji sin i cos dla 900 000 wartości na procesorze PII-300 podano w tabeli 13.1.

Technika    Czas

Tabela wartości    0,07 s

Funkcje trygonometryczne    0,931 s

Wbudowane funkcje trygonometryczne    0,751 s

Tabela 13.1. Czasy obliczania funkcji za pomocą tabeli wartości

Dygresja

Zauważmy, że w zależności od rodzaju zastosowania, czas obliczania indeksu tabeli wartości może zmniejszyć zalety jej użycia. Należy porównać użyty kod z innymi kodami. Jeśli jesteśmy w stanie zmieścić nasze jednostki w tabeli wartości i w ten sposób uniknąć wszelkich ich konwersji podczas zaglądania do niej, to możemy uzyskać naprawdę szybki kod.

Zwróćmy uwagę również na to, że błędy obliczeń w wypadku zastosowania tabeli wartości zależą od wyrażeń użytych przy obliczaniu tabelaryzowanych wartości oraz liczby elementów tabeli. Niektóre funkcje charakteryzują się szybkim wzrostem wartości w pobliżu pewnych argumentów. Na przykład sinus rośnie szybko w pobliżu 0 stopni. Większy błąd w tabeli wartości wystąpi dla kątów o rozwartości około 0 stopni, niż dla kątów o rozwartości około 90 stopni.

Warto uświadomić sobie też to, że ten sposób optymalizacji jest bardzo uzależniony od stosowanego procesora. Jeśli procesor ma wbudowane funkcje wykonujące potrzebne nam obliczenia, to mogą się one okazać szybsze niż użycie tabeli wartości. Należy przetestować kod w celu sprawdzenia, czy tabela wartości jest szybsza.

Przykład: Class Tring w misc.cpp


Wyszukiwarka

Podobne podstrony:
Literatura Bardzo dużo pozycji na temat jądra Linux-a, poniższe dotycząjądra 2.0.x M. Beck, H. Bohm,
BANK I KREDYT luty 2006Produkty i Techniki Bankowe 95 bardzo dużo czasu poświęcając na zrozumienie p
amerykanie by naraz chcieli zając je do zajęło by to bardzo dużo czasu i powodowało duże straty dlat
IMG 4 SPOIWA GIPSOWE (SIARCZANOWE) Dlaczego poświęcimy stosunkowo dużo czasu na omówienie spoiw gips
79668 Scan0123 OY ne postępy. Miał dużo czasu na jedzenie i picie i nawet leżał przez jakiś czas w p
Untitled2 16 Trudne tematy. Propozycje godzin wychowawczych / Nie jeść bardzo kalorycznych produktów
Rozdział 1. Wprowadzenie do Matlaba 9 ustawienie niektórych parametrów okna poleceń. Możemy tu na pr
Miałam dzisiaj w nocy wyjątkowo dużo czasu na myślenie i wiecie co? Macierzyństwo i imprezowani
16 Moje przygody z brydżem w tle doświadczenia. Potrzeba więc dużo czasu na zbadanie sytuacji i na z
7 ANTYKWA?ROKOWA Ilustracja niektórych charakterystycznych cech graficznych antykw barokowych na prz
CCF20090514101 306 IV. Status poznawczy nauki więcej, niektóre postępy mogą być wręcz niepożądane.
DSCN2045 (3) chowania całej klasy i udzielanie pomocy. Należy pamiętać, /eh. •_ tracić zbyt dużo cza

więcej podobnych podstron