Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Kurs C++

Biblioteka <math.h>

[lekcja] Omówienie niektórych funkcji standardowej biblioteki matematycznej.

Biblioteka matematyczna

Pisząc programy często okazuje się, że podstawowe działania matematyczne, jakie udostępnia nam C++ są niewystarczające. Z pomocą przychodzi tu kolejna biblioteka: math.h.

Stałe matematyczne

Dwoma podstawowymi stałymi, jakie najczęściej przyjdzie nam wykorzystywać z biblioteki matematycznej to liczba pi i stała e. Wartość liczby pi możemy odczytać ze stałej M_PI, natomiast wartość liczby e ze stałej M_E.
C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
    cout << "Wartosc liczby 'pi' wynosi: " << M_PI << endl;
    cout << "Wartosc liczby 'e' wynosi:" << M_E << endl;
    getch();
    return( 0 );
}
Ważne, jest tu podkreślenie faktu, że strumień cout ogranicza automatycznie ilość wyświetlanych liczb po przecinku. Jeśli będziesz wykorzystywał stałe matematyczne z biblioteki math.h z pewnością nie musisz się martwić o dokładność wyników, ponieważ stałe te zawierają conajmniej 18 cyfr po przecinku.

Zaokrąglanie liczb

Wraz z dołączeniem pliku nagłówkowego math.h poza stałymi dostajemy bardzo dużą ilość funkcji. Pierwszymi funkcjami, które chcę omówić to funkcje zaokrąglające liczbę i są to:
C/C++
double round( double );
double ceil( double );
double floor( double );
Każda z tych funkcji przyjmuje jako jedyny parametr liczbę rzeczywistą i zwraca zaokrągloną liczbę typu rzeczywistego (zmiennoprzecinkowego). Różnice są natomiast w wynikach, jakie otrzymamy z każdej z tych funkcji.

Funkcja round

Funkcja round odpowiada standardowemu zaokrąglaniu, jakie znamy ze szkoły. Każda liczba, której pierwsza liczba po przecinku jest większa lub równa 5 jest zaokrąglana w górę, natomiast w przeciwnym przypadku liczba jest zaokrąglana w dół.

Funkcja ceil

Funkcja ceil zaokrągla liczby zawsze w górę. Tak więc, liczba np. 3.0001 zostanie zaokrąglona do 4.

Funkcja floor

Funkcja floor zaokrągla liczby zawsze w dół. Przykładowo liczba 5.9999 zostanie zaokrąglona do 5.

Tabela porównawcza funkcji zaokrąglających

W celu lepszego zobrazowania zachowania każdej z wymienionych funkcji prezentuję tabelę, pokazującą jak przykładowe liczby będą zaokrąglane w zależności od użytej funkcji.
liczbaround(liczba)ceil(liczba)floor(liczba)
10101010
10.0001101110
10.4999101110
10.5111110
10.9999111110
-6-6-6-6
-6.4-6-6-7
-6.5-7-6-7
-6.9-7-6-7

Przykład

Jeśli nadal masz wątpliwości co do działania tych funkcji, zamieszczam przykład, który powinien rozwiać Twoje ewentualne pytania pod warunkiem, że skompilujesz go i potestujesz.
C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
    double liczba;
    cout << "Podaj liczbe: ";
    cin >> liczba;
    cout << "round(" << liczba << ")=" << round( liczba ) << endl;
    cout << "ceil(" << liczba << ")=" << ceil( liczba ) << endl;
    cout << "floor(" << liczba << ")=" << floor( liczba ) << endl;
    getch();
    return( 0 );
}

Podstawowe funkcje trygonometryczne

Jak nie trudno się domyślić po nazwie działu omówione zostaną tu trzy podstawowe funkcje trygonometryczne: sinus, cosinus i tangens.
C/C++
double sin( double );
double cos( double );
double tan( double );
Wszystkie wymienione wyżej funkcje przyjmują jako parametr wejściowy kąt. Kąt dla tych funkcji musimy podawać w radianach. Używając funkcji trygonometrycznych nie należy zapominać o asymptotach jakie występują w niektórych funkcjach i należy pamiętać o zabezpieczaniu programów przed ewentualnymi błędami, jakie mogą się pojawić w wyniku wykonywania nieprawidłowych działań matematycznych.
Funkcje te wykorzystuje się analogicznie do round, ceil i floor.

Zamiana stopni na radiany

Jeśli uważałeś na lekcjach w szkole, powinieneś wiedzieć, że PI == 180 stopni. Stąd wyznaczenie wzoru przekształcającego dowolny kąt na radiany jest już bardzo proste i formuła zapisana w C++ będzie wyglądała następująco:
C/C++
double stopnie;
cout << "Podaj kat w stopniach: ";
cin >> stopnie;
double radiany =( stopnie * M_PI ) / 180.0f;

Potęgowanie liczb

Jeśli mamy potrzebę podnieść jakąkolwiek liczbę do dowolnej potęgi możemy to zrobić używając funkcji pow. Funkcja ta przyjmuje dwa parametry i zwraca wynik potęgowania. Pierwszym parametrem jest liczba, którą chcemy potęgować, drugim natomiast potęga do której chcemy wybraną liczbę podnieść.
double pow( double, double );

Przykład

C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
    double liczba, potega;
    cout << "Podaj liczbe: ";
    cin >> liczba;
    cout << "Do ktorej potegi podniesc liczbe " << liczba << "? Wpisz wartosc: ";
    cin >> potega;
    cout << "pow(" << liczba << "," << potega << ")=" << pow( liczba, potega ) << endl;
    getch();
    return( 0 );
}

Pierwiastek  stopnia drugiego

Biblioteka math.h została również wyposażona w funkcję sqrt. Służy ona do obliczenia pierwiastka stopnia drugiego. Pierwszym i jedynym parametrem tej funkcji jest liczba z której chcemy policzyć pierwiastek. Funkcja zwraca wartość pierwiastka z liczby, którą przekazaliśmy parametrem do funkcji.
C/C++
double sqrt( double );
Pamiętaj, że pierwiastek z liczby ujemnej nie istnieje (w ciele liczb rzeczywistych, na których są dokonywane obliczenia w komputerze). Gdy używasz jakichkolwiek funkcji matematycznych myśl jak matematyk, nie jak informatyk. Unikniesz później błędów i co ważniejsze nerwów jakie mogą się z błędami wiązać.

Pierwiastki wyższego stopnia

Jeśli chcesz policzyć wartość pierwiastka dowolnego stopnia, powinieneś tu skorzystać z funkcji pow.
C/C++
sqrt( liczba ) == pow( liczba,( 1 / 2.0 ) )
Czyli jeśli chcemy uzyskać pierwiastek stopnia piątego, zapis będzie następujący:
C/C++
double liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
double wynik = pow( liczba,( 1 / 5.0 ) ); //lub poprostu: pow(liczba,0.2);
cout << "Pierwiastek stopnia piatego z liczby " << liczba << " to: " << wynik << endl;

Logarytmy

Ostatnimi funkcjami, jakie postanowiłem jeszcze omówić z biblioteki math.h to logarytmy. Funkcja log i log10 przyjmują po jednym parametrze wejściowym. Obie funkcje obliczają logarytm z liczby przekazanej przez parametr po czym zwracają wynik. Wyniki jednak będą różne, ponieważ funkcja log to logarytm naturalny (czyli o podstawie e), natomiast funkcja log10 to logarytm o podstawie 10.
C/C++
double log( double );
double log10( double );
Jeśli wymienione funkcje będą dla Ciebie niewystarczające będziesz zmuszony poszukać informacji na ten temat w Internecie.

Pozostałe informacje

Biblioteka math.h zawiera znacznie więcej stałych i funkcji niż te, które zostały w tym rozdziale wymienione. Po raz kolejny odsyłam Cię do innych źródeł i zachęcam do skorzystania ze strony http://forum.ddt.pl, jeśli będzie taka potrzeba.
Poprzedni dokument Następny dokument
Biblioteka <time.h> Obsługa strumienia cout