C/exp
Z Wikibooks, biblioteki wolnych podręczników.
Spis treści |
[edytuj] Plik nagłówkowy
[edytuj] Funkcje wykładnicze
double exp (double x); float expf (float x); long double expl (long double x); double exp2 (double x); float exp2f (float x); long double exp2l (long double x); double expm1 (double x); float expm1f(float x); long double expm1l(long double x); double ldexp (double x, int n); float ldexpf(float x, int n); long double ldexpl(long double x, int n); double scalbn (double x, int n); float scalbnf(float x, int n); long double scalbnl(long double x, int n); double scalbln (double x, long n); float scalblnf(float x, long n); long double scalblnl(long double x, long n);
[edytuj] Funkcje logarytmiczne
double log (double x); float logf(float x); long double logl(long double x); double log10 (double x); float log10f(float x); long double log10l(long double x); double log1p (double x); float log1pf(float x); long double log1pl(long double x); double log2 (double x); float log2f(float x); long double log2l(long double x); double logb (double x); float logbf(float x); long double logbl(long double x); int ilogb (double x); int ilogbf(float x); int ilogbl(long double x); double frexp (double x, int *n); float frexpf(float x, int *n); long double frexpl(long double x, int *n);
[edytuj] Stałe
#define FP_ILOGB0 watość #define FP_ILOGBNAN wartość
[edytuj] Argumenty
- x
- argument funkcji
- n
- wykładnik
[edytuj] Opis
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.
Funkcje obliczają następujące wartości:
| exp | eksponenta x | czyli ![]() |
| exp2 | dwa do potęgi x | ![]() |
| expm1 | eksponenta x pomniejszona o jeden | ![]() |
| ldexp | x razy dwa do potęgi n | ![]() |
| scalbln i scalbn | x razy FLT_RADIX do potęgi n | ![]() |
| log | logarytm naturalny z x | lub ![]() |
| log10 | logarytm dziesiętny z x | ![]() |
| log1p | logarytm naturalny z jeden plus x | ![]() |
| log2 | logarytm o podstawie dwa z x | ![]() |
| logb | zwraca wykładnik podanego argumentu jako liczbę całkowitą ze znakiem, w taki sposób, że dla dodatniego skończonego argumentu zachodzi: ![]() |
|
| ilogb | jeżeli x jest równy zero wartość FP_ILOGB0; jeżeli jest równy nieskończoność - INT_MAX; jeżeli jest to wartość NaN - FP_ILOGBNAN; w przeciwnym wypadku wartość zwracana przez logb zrzutowaną do typu int | |
| frexp | zwraca znormalizowaną część liczby x z przedziału [0,5; 1), a zmiennej wskazywanej przez n zapisuje wykładnik potęgi dwójki; jeżeli x jest równe zero obie części są równe zero |
Jeżeli x jest liczbą ujemną (mniejszą od -1) funkcje log, log10 i log2 ustawiają (funkcja log1p ustawia) zmienną errno na EDOM.
Stała FP_ILOGB ma wartość INT_MIN lub -INT_MAX, natomiast FP_ILOGBNAN wartość INT_MAX lub INT_MIN.
[edytuj] Wartość zwracana
Wartości odpowiednich funkcji zgodnei z opisem powyżej.
Ponadto, jeżeli wystąpi nadmair funkcja zwraca w wyniku HUGE_VAL z odpowiednim znakiem i ustawia wartość zmeinnej errno na ERANGE. Jeśli wystąpi niedomiar funkcja w wyniku zwraca zero, a to czy do zmiennej errno zostanie zapisana wartość ERANGE zależy od implementacji.
[edytuj] Przykład użycia
Czas połowicznego rozpadu pierwiastka to czas, po którym rozpadnie się połowa atomów pierwiastka promieniotwórczego. Poniższy program oblicza liczbę atomów pozostałych po podanym czasie zgodnie ze wzorem:

gdzie N0 to początkowa liczba cząstek a T1 / 2 to czas połowicznego rozpadu.
#include <math.h>
#include <stdio.h>
int main(void) {
double N0, T12, t, N;
#if __STDC_VERSION__ < 199901L
double lambda;
#endif
printf("N_0 = ");
if (scanf("%lf", &N0)!=1) return 1;
printf("T_{1/2} = ");
if (scanf("%lf", &T12)!=1) return 1;
printf("t = ");
if (scanf("%lf", &t)!=1) return 1;
#if __STDC_VERSION__ < 199901L
lambda = log(2) / T12;
N = N0 * exp(- lambda * t);
#else
N = N0 * exp2(-t/T12);
#endif
printf("N = %g\n", N);
return 0;
}
[edytuj] Uwagi
Wersje funkcji z przyroskiem "f" i "l" (tzn. wersje operujące na zmiennych typu float i long double) zostały wprowadzone dopiero w standardzie C99. Również funkcje exp2, expm1, scalbn, scalbln, log2, log1p, logb oraz ilogb, a także stałe FP_ILOGB0 oraz FP_ILOGBNAN zosatł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.
czyli 




lub 



