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.
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
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