C/fmod

Z Wikibooks, biblioteki wolnych podręczników.
< C

Deklaracja[edytuj]

double      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[edytuj]

math.h

Argumenty[edytuj]

x, y
argumenty ilorazu
quo
wskaźnik do części

Opis[edytuj]

Funkcje 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[edytuj]

Wartoś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[edytuj]

Redukcja 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[edytuj]

Wersje 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.


Żródła[edytuj]

  1. trygonometria: funkcje-trygonometryczne-dowolnego-kata-i-wzory-redukcyjne