[ Pobierz całość w formacie PDF ]

wartość wyrażenia baseexponent).
Podobną do powyższej deklarację funkcji, przedstawiającą jej nazwę, ilość i typy
parametrów oraz typ zwracanej wartości, nazywamy prototypem.
Oto kilka przykładów wykorzystania funkcji pow():
double fX;
fX = pow(2, 8); // ósma potęga dwójki, czyli 256
fX = pow(3, 4); // czwarta potęga trójki, czyli 81
fX = pow(5, -1); // odwrotność piątki, czyli 0.2
Inną równie często wykonywaną czynnością jest pierwiastkowanie. Realizuje ją między
innymi funkcja sqrt() (ang. square root  pierwiastek kwadratowy):
double sqrt(double x);
Jej jedyny parametr to oczywiście liczba, która chcemy pierwiastkować. Użycie tej funkcji
jest zatem niezwykle intuicyjne:
fX = sqrt(64); // 8 (bo 8*8 == 64)
fX = sqrt(2); // około 1.414213562373
40
Znak ^, który służy w nich do wykonywania tego działania, jest w C++ zarezerwowany dla jednej z operacji
bitowych  różnicy symetrycznej. Więcej informacji na ten temat możesz znalezć w Dodatku B, Reprezentacja
danych w pamięci.
Operacje na zmiennych 119
fX = sqrt(pow(fY, 2)); // fY
Nie ma natomiast wbudowanej formuły, która obliczałaby pierwiastek dowolnego
stopnia z danej liczby. Możemy jednak łatwo napisać ją sami, korzystając z prostej
własności:
1
a
a
x = x
Po przełożeniu tego równania na C++ uzyskujemy następującą funkcję:
double root(double x, double a) { return pow(x, 1 / a); }
Zapisanie jej definicji w jednej linijce jest całkowicie dopuszczalne i, jak widać, bardzo
wygodne. Elastyczność składni C++ pozwala więc na zupełnie dowolną organizację kodu.
Dokładny opis poznanych funkcji pow() i sqrt() znajdziesz w MSDN.
Funkcje wykładnicze i logarytmiczne
Najczęściej stosowaną w matematyce funkcją wykładniczą jest ex , niekiedy oznaczana
także jako exp(x) . Taką też formę ma ona w C++:
double exp(double x);
Zwraca ona wartość stałej e41 podniesionej do potęgi x. Popatrzmy na kilka przykładów:
fX = exp(0); // 1
fX = exp(1); // e
fX = exp(2.302585093); // 10.000000
Natomiast funkcję wykładniczą o dowolnej podstawie uzyskujemy, stosując omówioną już
wcześniej formułę pow().
Przeciwstawne do funkcji wykładniczych są logarytmy. Tutaj mamy aż dwie odpowiednie
funkcje :) Pierwsza z nich to log():
double log(double x);
Jest to logarytm naturalny (o podstawie e), a więc funkcja dokładnie do odwrotna do
poprzedniej exp(). Otóż dla danej liczby x zwraca nam wartość wykładnika, do którego
musielibyśmy podnieść e, by otrzymać x. Dla pełnej jasności zerknijmy na poniższe
przykłady:
fX = log(1); // 0
fX = log(10); // 2.302585093
fX = log(exp(x)); // x
Drugą funkcją jest log10(), czyli logarytm dziesiętny (o podstawie 10):
double log10(double x);
41
Tak zwanej stałej Nepera, podstawy logarytmów naturalnych - równej w przybliżeniu 2.71828182845904.
Podstawy programowania
120
Analogicznie, funkcja ta zwraca wykładnik, do którego należałoby podnieść dziesiątkę,
aby otrzymać podaną liczbę x, na przykład:
fX = log10(1000); // 3 (bo 103 == 1000)
fX = log10(1); // 0
fX = log10(pow(10, x)); // x
Niestety, znowu (podobnie jak w przypadku pierwiastków) nie mamy bardziej
uniwersalnego odpowiednika tych dwóch funkcji, czyli logarytmu o dowolnej podstawie.
Ponownie jednak możemy skorzystać z odpowiedniej tożsamości matematycznej42:
logb x
loga x =
logb a
Nasza własna funkcja może więc wyglądać tak:
double log_a(double a, double x) { return log(x) / log(a); }
Oczywiście użycie log10() w miejsce log() jest również poprawne.
Zainteresowanych ponownie odsyłam do MSDN celem poznania dokładnego opisu funkcji
exp() oraz log() i log10().
Funkcje trygonometryczne
Dla nas, (przyszłych) programistów gier, funkcje trygonometryczne są szczególnie
przydatne, gdyż będziemy korzystać z nich niezwykle często  choćby przy różnorakich
obrotach. Wypadałoby zatem dobrze znać ich odpowiedniki w języku C++.
Na początek przypomnijmy sobie (znane, mam nadzieję :D) określenia funkcji
trygonometrycznych. Posłuży nam do tego poniższy rysunek:
Rysunek 1. Definicje funkcji trygonometrycznych dowolnego kąta
42
Znanej jako zmiana podstawy logarytmu. [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • mexxo.keep.pl