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