C/fmod
Deklaracja
edytujdouble fmod (double x, double y); float fmodf(float x, float y); long double fmodl(long double x, long double y); double remainder (double x, double y); float remainderf(float x, float y); long double remainderl(long double x, long double y); double remquo (double x, double y, int *quo); float remquof(float x, float y, int *quo); long double remquol(long double x, long double y, int *quo);
Plik nagłówkowy
edytujArgumenty
edytuj- x, y
- argumenty ilorazu
- quo
- wskaźnik do części
Opis
edytujFunkcje z przyrostkami "f" i "l" to inne wersje odpowiedniej funkcji bez przyrostka operujące na innych typach danych. 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.
Funkcja fmod oblicza resztę z dzielenia x przez y, tzn. taką liczbę , że jeżeli y jest różne od zera, zachodzi:
- .
Funkcja remainder zwraca resztę z dzielenia x przez y wymaganą przez IEC 60559, tzn. taką liczbę , że jeżeli y jest różne od zera, zachodzi: , gdzie jest liczbą całkowitą najbliższą wartości . Jeżeli istnieją dwie takie liczby całkowite jest parzysta.
Funkcja remquo zwraca resztę z dzielenia x przez y jak funkcja remainder i dodatkowo, zapisuje w zmiennej wskazywanej przez quo wartość przystającą modulo do wartości bezwzględnej wyrażenia , gdzie jest wartością zależną od implementacji nie mniejszą niż 3.
Wartość zwracana
edytujWartości odpowiednich funkcji zgodnie z opisem powyżej. Jeżeli y jest równe zero funkcja może zwrócić zero lub ustawić wartość zmiennej errno na EDOM.
Przykład użycia
edytujRedukcja zakresu dla funkcji trygonometrycznych ( okresowych). [1]
sin (1500) = sin (60º + 4*360º) = sin (60º) // w stopniach
// w radianach
/*
gcc f.c -Wall -Wextra -lm
./a.out
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h> // Data Type: div_t
int main () {
double r = 300.1234;
double rr;
double TwoPi=2.0*M_PI; //
div_t result; // ang. result = wynik
result = div ((int) r, (int) TwoPi);
rr = fmod(r,TwoPi); // range reduction for trigonometric function in radians
printf("%f = %f + %d*%f \n", r, rr , result.quot, TwoPi);
return(0);
}
Wynik:
300.123400 = 4.813691 + 50*6.283185
Uwagi
edytujWersje funkcji z przyrostkiem "f" i "l" (tzn. wersje operujące na zmiennych typu float i long double) zostały wprowadzone dopiero w standardzie C99. Również funkcje remainder oraz remquo zostały wprowadzone dopiero w standardzie C99.
W przypadku użycia funkcji matematycznych może zaistnieć konieczność podania odpowiedniego argumentu linkerowi, aby ten połączył program z biblioteką matematyczną. Np. na systemach GNU/Linux jest to -lm.