Deklaracja

edytuj
double      ceil (double      x);
float       ceilf(float       x);
long double ceill(long double x);

double      floor (double      x);
float       floorf(float       x);
long double floorl(long double x);

double      nearbyint (double      x);
float       nearbyintf(float       x);
long double nearbyintl(long double x);

double      rint (double      x);
float       rintf(float       x);
long double rintl(long double x);

long        lrint (double      x);
long        lrintf(float       x);
long        lrintl(long double x);

long long   llrint (double      x);
long long   llrintf(float       x);
long long   llrintl(long double x);

double      round (double      x);
float       roundf(float       x);
long double roundl(long double x);

long        lround (double      x);
long        lroundf(float       x);
long        lroundl(long double x);

long long   llround (double      x);
long long   llroundf(float       x);
long long   llroundl(long double x);

double      trunc (double      x);
float       truncf(float       x);
long double truncl(long double x);

double      modf (double      x, double      *ptr);
float       modff(float       x, float       *ptr);
long double modfl(long double x, long double *ptr);

Plik nagłówkowy

edytuj

math.h

Argumenty

edytuj
x
argumenty funkcji
ptr
wskaźnik do części ułamkowej

Funkcje z przyrostkami "f" i "l" to inne wersje odpowiedniej funkcji bez przyrostka operujące na innych typach danych. Ponadto, funkcje z przedrostkiem "l" lub "ll" to inne wersje odpowiadających funkcji bez przedrostka zwracające wartości typu long lub long long. Z tego powodu w poniższym opisie odwołanie do konkretnej funkcji będzie oznaczać odwołanie się do wszystkich 3 wersji bez lub z przyrostkiem oraz do wszystkich wersji z przedrostkiem jeżeli takie istnieją.

Funkcje obliczają następujące wartości:

  • ceil - sufit argumentu, czyli najmniejszą liczbę całkowitą większą lub równą x,
  • floor - podłogę argumentu, czyli największa liczba całkowita mniejsza lub równa x,
  • nearbyint - argument zaokrąglony do liczby całkowitej zgodnie z przyjętym kierunkiem zaokrąglania,
  • rint - podobnie jak nearbyint argument zaokrąglony do liczby całkowitej zgodnie z przyjętym kierunkiem zaokrąglania, przy czym możliwe jest zaistnienie błędu niedokładności,
  • round - argument zaokrąglony do najbliższej liczby całkowitej; jeżeli istnieją dwie takie liczby zaokrągla do tej o większym module,
  • trunc - argument zaokrąglony w stronę zera, tj. liczbę całkowitą o największym module mniejszym lub równym modułowi x,
  • modf - argument zaokrąglony w stronę zera (jak trunc) i dodatkowo w zmiennej wskazywanej przez ptr zapisuje część ułamkową argumentu.

Wartość zwracana

edytuj

Wartości odpowiednich funkcji zgodnie z opisem powyżej.

W przypadku funkcji z przedrostkami "l" i "ll", jeżeli wartość nie mieści się w typie to zwracana wartość jest nieokreślona.

Przykład użycia

edytuj

Przykład użycia modf[1][2]

  
#include <stdio.h>
#include <math.h>

int main( void)
{
    double floating = 3.40;
    double fractional;
    double integer;

    fractional = modf(floating, &integer);
    printf ("%f =  %f +  %f\n", floating, integer, fractional); // when using printf, there are no floats

    return 0;
}


kompilujemy

gcc m.c -Wall -Wextra

uruchamiamy

./a.out

Wynik:

3.400000 =  3.000000 +  0.400000

Wersje funkcji z przyroskiem "f" i "l" (tzn. wersje operujące na zmiennych typu float i long double) zostały wprwoadzone dopiero w standardzie C99. Również funkcje nearbyint, rint, lrint, llrint, lround oraz llround zostały wprowadzone dopiero w standardzie C99.

W przypadku użycia funkcji matematycznych może zaistnieć konieczność podania odpowiedneigo argumentu linkerowi, aby ten połączył program z biblioteką matematyczną. Np. na systemach GNU/Linux jest to -lm.

Przypisy