Funkcje matematyczne
matherr<STDLIB.H>
Jest to standardowa funkcja biblioteczna obsługujaca błędy operacji arytmetycznych. Możemy jednak stworzyć własną jej wersję. Wtedy sami mamy mozliwość obsługi wszystkich mozliwych błędów arytmetycznych. jeżeli w programie jest zdefiniowana fumkcja matherr, to zawsze "nadpisze" ona standardową funkcję biblioteczną.
Składnia:int matherr(struct exception *e);
gdzie:e - wskaźnik do struktury opisującej błąd. Deklaracja struktury (w pliku nagłówkowym math.h):
struct exception {
  int     type;		// typ wyjątku
  char   *name;		// nazwa funkcji, w której wystąpił wyjątek
  double  arg1;		// pierwszy argument funkcji
  double  arg2;		// drugi argument funkcji
  double  retval;	// wartość, która ma być zwrócona przez funkcję
};
Zwracana wartość:Funkcja zwraca 0, by zasygnalizować błąd lub wartość niezerową, która oznacza udaną korektę błędu. Dla zera funkcja, która wywołała matherr wyświetla komunikat błędu i inicjuje zmienną globalną errno odpowiednia wartościa. Należy zawsze o tym pamietać pisząc własne procedury obsługi błędów.
Przykład:
// Obsługa błędów koryguje sytuację, 
// gdy chcemy obliczyć pierwiastek z liczby ujemnej

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

int matherr (struct exception *e)
{ if (e.type == DOMAIN)
      if (!strcmp(a.name, "sqrt"))
	  { e.retval = sqrt( -(e.arg1) );
        return 1;
      }
   return 0;
}

int main(void)
{ double x = -2.0, y;
  y = sqrt(x);
  printf("Wartość poprawiona przez MATHERR: %lf\n",y);
  return 0;
}
poly<STDLIB.H>
Funkcja służy do wyznaczenia wartości wielomianu stopnia n o współczynnikach podanych w tablicy w dla wartości x. Wyrażenie opisujące wielomian wygląda następująco:
w[n]xn + w[n-1]xn-1 + ... + w[1]x + w[0]
Składnia:double poly(double x, int n, double w[]);
gdzie:x - zmienna, dla której obliczamy wartość wielomianu
n - stopien wielomianu
w [ ] - tablica współczynników (n + 1 elementów)
Zwracana wartość:Funkcja zwraca obliczoną wartość wielomianu.
Przykład:
// obliczenie wartości wielomianu:
//      x3 - 2x2 + 5x - 1
// dla x = 2

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

void main(void)
{ double w[] = { -1.0, 5.0, -2.0, 1.0 };
  double wynik;

  wynik = poly(2.0, 3, w);
  printf("Wartość wielomianu dla x=2: %lf\n", wynik);
}
randomize, srand<STDLIB.H>
Funkcje inicjujące generator liczb losowych wartością startową. Funkcja randomize inicjuje generator na podstawie zegara systemowego, natomiast funkcja srand inicjuje generator na podstawie wartości podanej w parametrze.
Składnia:void randomize(void);
void srand(unsigned n)
gdzie:n - wartość inicjujaca generator liczb losowych
Zwracana wartość:brak
rand<STDLIB.H>
Funkcje generuje całkowitą liczbę losową z przedziału 0 - MAXINT. Należy pamiętać o wcześniejszym uruchomieniu generatora liczb losowych: bez tego, przy kazdym uruchomieniu programu otrzymamy dokładnie taki sam ciąg liczb.
Aby otrzymać liczbę losową z przedziału [n ; m] użyj wzoru: rand() % (m - n + 1) + n
Składnia:int rand(void);
Zwracana wartość:Liczba losowa z przedziału 0 - MAXINT.
Przykład:
#include <stdlib.h>
#include <stdio.h>

void main(void)
{ int i;

  randomize();
  printf("10 liczb losowych z przedziału 500 - 599\n");
  for(i=0; i<10; i++)
      printf("%d\n", rand() % 100 + 500);
}
random<STDLIB.H>
Funkcje generuje całkowitą liczbę losową z przedziału 0 - (n - 1). Należy pamiętać o wcześniejszym uruchomieniu generatora liczb losowych: bez tego, przy kazdym uruchomieniu programu otrzymamy dokładnie taki sam ciąg liczb.
Składnia:int random(int n);
gdzie:n - górna granica losowanych liczb
Zwracana wartość:Liczba losowa z przedziału 0 - (n - 1).
Przykład:
#include <stdlib.h>
#include <stdio.h>

void main(void)
{ int i;

  randomize();
  printf("10 liczb losowych z przedziału 0 - 99\n");
  for(i=0; i<10; i++)
     printf("%d\n", random (100));
}