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));
}
|