Niektóre stałe i funkcje z pliku nagłówkowego math

Transkrypt

Niektóre stałe i funkcje z pliku nagłówkowego math
Funkcje standardowe
Niektóre stałe i funkcje z pliku nagłówkowego math.h.
Stałe
Identyfikator
M_E
M_LOG2E
M_LOG10E
M_LN2
M_LN10
M_PI
M_PI_2
M_PI_4
M_1_PI
M_2_PI
M_1_SQRTPI
M_2_SQRTPI
M_SQRT2
M_SQRT_2
Znaczenie
e
log2(e)
log10(e)
ln(2)
ln(10)


2

4
1
2
1 

2
2
1
2
Biblioteki standardowe Borland C++ zawierają funkcje operujące na liczbach rzeczywistych
typu double i typu long double . Dla funkcji, których nazwa zakończona jest literą „l”
argument i wynik są typu long double.
Funkcje trygonometryczne:
sin,sinl, cos,cosl, tan,tanl obliczające odpowiednio sinus, cosinus i tangens
dla zadanego argumentu w radianach. W przypadku tangensa należy pamiętać, że funkcja nie
jest określona dla kątów  2  2k , k całkowite.
Deklaracja funkcji obliczającej cosinus jest następująca
double cos(double x);
long double cosl(long double x);
Analogicznie dla dwu pozostałych funkcji.
1
Funkcje standardowe
Funkcje cyklometryczne:
Są to funkcje asin,asinl, acos,acosl, atan, atanl obliczające arcussinus,
arcuscosinus oraz arcustangens. Ponadto są funkcje atan2 i atan2l obliczające
arcustangens dla ilorazu argumentów.
double asin(double x);
long double asinl(long double x);
Funkcja oblicza arcussinus dla argumentu z przedziału [-1, 1]. Jako wynik otrzymujemy
liczbę z przedziału [
 
, ].
2 2
Podobnie dla acos, acosl z tym, że wynik należy do przedziału [0,  ] .
double atan(double x);
long double atanl(long double x);
Wartością funkcji jest arcustangens argumentu x. Wartość wynikowa należy do przedziału
[
 
, ].
2 2
double atan2(double x, double y);
long double atan2l(long double x, long double y);
Wartością funkcji jest arcustangens dla ilorazu argumentów x/y. Zaletą funkcji jest, że
zwraca poprawne wartości dla y bliskich zero.
Funkcje hiperboliczne
Są to funkcje wyznaczania wartości sinusa, cosinusa i tangensa hiperbolicznego: sinh,
sinhl, cosh, coshl, tanh tanhl. Wartościami ich są odpowiednio: ( e x  e  x ) / 2,
( e x  e  x ) / 2 i sinh(x)/cosh(x).
Nagłówek dla sinusa hiperbolicznego jest następujący
double sinh(double x);
long double sinhl(long double x);
i podobnie dla dwu pozostałych funkcji.
2
Funkcje standardowe
Funkcje wykładnicze i logarytmiczne
exp, expl
double exp(double x);
long double expl(long double x);
oblicza wartość e x .
ldexp, ldexpl
double ldexp(double x, int wykl);
long double expl(long double x, int wykl);
oblicza wartość x * 2 wykl
funkcje log,
logl,
log10,
log10l pozwalają obliczyć wartość logarytmu
naturalnego i logarytmu dziesiętnego. Ich deklaracje są podobne do dotychczas przytaczanych
Przykład zastosowania
cout << log(M_E);
wyświetli wartość 1.
W dalszym ciągu nie będziemy przytaczali wszystkich funkcji z przyrostkiem „l”.
Potęgi, pierwiastki i wielomiany
Wartość wielomianu można obliczy przy pomocy funkcji poly, polyl
double poly(double x, int n, double a[]);
oblicza wartość wielomianu stopnia n o współczynnikach w tablicy a dla argumentu x. Postać
wielomianu stopnia n jest następująca
an*xn + an-1*xn-1. ...+ a1*x + a0
Przykład:
#include <iostream >
#include <math.h >
using namespace std;
/* wielomian:
x**3 - 2x**2 + 5x - 1 */
void main(void)
3
Funkcje standardowe
{
double wspolcz[] = { -1.0, 5.0, -2.0, 1.0};
double result;
result = poly(2.0, 3, wspolcz);
cout<<"Wartość wielomianu: \n x^3 - 2x^2 + 5x – 1”;
cout<<”\nw
2.0 wynosi :" << result<<endl;
system("pause");
}
Na ekranie otrzymamy następujące wyniki
Wartość wielomianu:
x^3 - 2x^2 + 5x - 1
w
2.0 wynosi :9
Wartość xy można obliczyć przy pomocy funkcji pow, powl
double pow(double x, double y);
Uwaga: dla x<0, y powinien być całkowitą liczbą. Poprawne jest wywołanie pow(2.0,3.0) a pow(-2.0,3.5) jest niepoprawne.
Wartość 10n można obliczyć przy pomocy funkcji pow10, pow10l
double pow10(int n);
I tak
cout <<pow10(3.50);
jako wynik daje 1000 ( 3.5 konwertowane jest na typ int).
Przy pomocy funkcji sqrt i sqrtl obliczamy wartość pierwiastka kwadratowego.
double sqrt(double x);
Funkcje zaokrągleń
Zaokrąglenie w górę realizują funkcje ceil i ceill. Deklaracja pierwszej to
double ceil(double x);
Wartością funkcji jest najmniejsza liczba całkowita nie mniejsza niż x.
4
Funkcje standardowe
Zaokrąglenie w dół realizują funkcje floor i floorl. Deklaracja
double ceil(double x);
wartością funkcji jest największa liczba całkowita nie większa niż x.
Przykład:
x=floor(123.45); // x=123;
y=ceil(123.45);
// y=124;
Inne funkcje
Wartość bezwzględną można wyznaczyć przy pomocy
int abs(int x); //daje wynik całkowity
double fabs(double x); // wynik double
long double fabsl(long double x); // wynik long double
Funkcje
double fmod(double x, double y);
i fmodl obliczają resztę z dzielenia x przez y. Reszta f określona jest tak, że x
= ay + f dla pewnego całkowitego a, i 0 <=abs(f) < abs(y). Jeśli y = 0
to fmod i fmodl zwracają 0.
cout
<<fmod(6.44,2.5)<<”
<<fmod(6.44,-2.5)<<”
”<<fmod(-6.44,2.5)<<”
”
” <<fmod(-6.44,-2.5);
wyświetli na ekranie liczby
1.44
-1.44
1.44
-1.44
Funkcja
double frexp(double x, int *exponent);
(jest frexpl) dzieli liczbę rzeczywistą x na mantysę m[0.5,1]
i całkowity
wykładnik tak aby zachodziła równość x = m*2n. Obliczona mantysa jest wartością
funkcji
a
wykładnik
n
jest
zapamiętywany w
exponent.
5
zmiennej
wskazywanej
przez
Funkcje standardowe
Przykład
int n;
double m;
...
m = frexp(8, &n);
cout<<m<<"*2^"<<n<<endl; ...
wyświetli
0.5*2^4
Funkcja zadeklarowana
double modf(double x, double *ipart);
rozdziela liczbę rzeczywistą x na część całkowitą, która jest przypisywana zmiennej
wskazywanej przez ipart, i ułamkową, która jest wartością funkcji. (jest również wersja
long)
I tak
ulamek=modf(-100.45,&calkowita);
jako wyniki daje ulamek=-0.45 i calkowita=-100.
Funkcja
double hypot(double x, double y);
oblicza wartość sqrt(x*x+y*y);
6
Funkcje standardowe
Funkcje konwersji
(plik nagłówkowy stdlib.h)
Konwersja
łańcuch -> liczba całkowita
Funkcje o deklaracji
int atoi(const char *s);
long atol(const char *s);
przekształcają łańcuch wskazywany przez parametr s w liczbę całkowitą typu int lub long
odpowiednio. Łańcuch musi zawierać zapis w postaci
[spacje][znak][ddd]
gdzie
 spacje oznaczają dowolną liczbę znaków spacji lub tabulacji,
 znak jest „+” lub „-” ,
 ddd jest łańcuchem cyfr dziesiętnych.
Obie funkcji nie obsługują błędów związanych z przekroczeniem zakresu liczb. Pierwszy nie
rozpoznany znak kończy konwersję. Jako wartość zwracana jest dotychczas utworzona liczba
lub zero.
Przykład:
atoi("1234") // 1234;
atoi("1234567890123") // przekroczenie zakresu wynik nieokreślony
atoi("123.4") // 123
atoi("123w4") //123;
atoi("
w1234") // 0
Są również funkcje konwersji dla systemu ósemkowego i szesnastkowego.
Liczba całkowita -> łańcuch
char *itoa(int value, char *string, int radix);
char *ltoa(long value, char *string, int radix);
char *ultoa(unsigned long value, char *string, int radix);
7
Funkcje standardowe
Funkcje te zamieniają liczbę całkowitą określoną parametrem
value na łańcuch
reprezentujący ją w systemie o podstawie radix i zapisie znak moduł. Funkcje zwracają
adres określony parametrem string.
Uwagi:
 parametr radix powinien być z przedziału [2,36];
 w przypadku podania złej podstawy wynikiem jest łańcuch pusty
 funkcja itoa na wynik może wykorzystać maksymalnie 17 znaków (2 bajty + NULL) a
pozostałe dwie 33 znaki.
Następujący ciąg instrukcji wyświetli zapis liczby 2015 w różnych systemach liczenia:
{ char LiczbaStr[20];
for (int i=2; i<37; i++)
cout << setw(2)<<i<<" "<< itoa(1999,LiczbaStr,i)<<endl;
}
łańcuch -> liczba rzeczywista
double atof(const char *s);
long double _atold(const char *s);
double strtod(const char *s, char **endptr);
long double _strtold(const char *s, char **endptr);
Dwie pierwsze funkcje osiągalne są również w pliku nagłówkowym math.h .
Wynikiem funkcji jest wartość liczby otrzymanej z łańcucha s. Funkcje rozpoznają +INF i
-INF jako nieskończoności. Lepszą kontrolę błędów konwersji zapewnia drugi zestaw funkcji.
W nich ostatni parametr zawiera adres pierwszego znaku nie wchodzącego w skład liczby
rzeczywistej.
Dla
char *znak,liczba[]="123.56w456";
cout << strtod(liczba,&znak);
cout <<"
"<<*znak<<endl;
otrzymamy na ekranie
123.56
w
8

Podobne dokumenty