C/Standardikirjastot/math.h
#include <math.h>
Funktiot
[muokkaa | muokkaa wikitekstiä]Kaikille funktioiden yhteiset tiedot:
- C99-standardissa määritellään myös samat funktiot float- ja long double -tyypeille. Ensimmäisen nimen perään lisätään määre f ja jälkimmäisen perään l; esim. sin (double), sinf (float), sinl (long double). Otsikkotiedosto tgmath.h tekee määreettömistä funktioista (esim. sin) geneeriset niin, ettei määrettä tarvitse käyttää, vaan oikea tietotyyppi valitaan automaattisesti. (Muuten määreetön käyttää aina double-tyyppiä, niin kuin ennen C99:ta.)
- Mikäli annettu arvo on funktion määrittelyalueen ulkopuolella, palautettu arvo on määrittelemätön ja virheen numeroksi (errno, ks. errno.h) asetetaan EDOM. Ks. kuitenkin alempi Virheenkäsittely-osio, mikäli käytössä on C99 tai uudempi standardi.
- Mikäli funktion tulos on tietotyypin arvoalueen ulkopuolella, palautettu arvo on ±HUGE_VAL, jos arvo on liian kaukana nollasta esitettäväksi, tai 0, jos liian lähellä nollaa esitettäväksi. Lisäksi virheen numeroksi (errno, ks. errno.h) asetetaan ERANGE. Ks. kuitenkin alempi Virheenkäsittely-osio, mikäli käytössä on C99 tai uudempi standardi.
Trigonometriset funktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double acos(double x);
|
Arkuskosini. Palauttaa radiaaneina (päähaaran) arvon y niin, että cos(y) = x. Funktion määrittelyalue x:lle on [-1, +1], ja arvoalue on [0, π]. |
double asin(double x);
|
Arkussini. Palauttaa radiaaneina (päähaaran) arvon y niin, että sin(y) = x. Funktion määrittelyalue x:lle on [-1, +1], ja arvoalue on [-½π, +½π]. |
double atan(double x);
|
Arkustangentti. Palauttaa radiaaneina (päähaaran) arvon y niin, että tan(y) = x. Funktion määrittelyalue x:lle on [-1, +1], ja arvoalue on [-½π, +½π]. |
double atan2(double y, double x);
|
Kaksiparametrinen arkustangentti. Jotakuinkin atan(y/x), mutta palauttaa kulman (radiaaneina).
Tällä voidaan muuttaa piste karteesisessa koordinaatistossa kulmaksi napakoordinaatistossa. Arvoalue on [-π, +π]. Virhe, jos y ja x ovat samaan aikaan 0. |
double cos(double x);
|
Kosini. Laskee kulman x (radiaaneina) kosinin. Funktion arvoalue on [-1, +1]. |
double sin(double x);
|
Sini. Laskee kulman x (radiaaneina) sinin. Funktion arvoalue on [-1, +1]. |
double tan(double x);
|
Tangentti. Laskee kulman x (radiaaneina) tangentin. |
Hyperboliset funktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double acosh(double x);
|
[C99] Hyperbolinen arkuskosini. |
double asinh(double x);
|
[C99] Hyperbolinen arkussini. |
double atanh(double x);
|
[C99] Hyperbolinen arkustangentti. |
double cosh(double x);
|
Hyperbolinen kosini. |
double sinh(double x);
|
Hyperbolinen sini. |
double tanh(double x);
|
Hyperbolinen tangentti. |
Eksponenttifunktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double exp(double x);
|
Eksponenttifunktio. Laskee eksponentin, jonka kantaluku on Neperin luku (e, 2.718...) ja potenssi on x. |
double exp2(double x);
|
[C99] 2-kantainen eksponenttifunktio. Laskee eksponentin, jonka kantaluku on 2 ja potenssi on x. |
double expm1(double x);
|
[C99] Laskee eksponentin, jonka kantaluku on Neperin luku (e, 2.718...) ja potenssi on x, ja vähentää siitä yhden. Teoriassa yhtä kuin exp(x) - 1, mutta tarkempi. |
double frexp(double x, int *eksponentti);
|
Pilkkoo liukuluvun mantissaan, joka on väliltä [½, 1) (mahdollisesti negatiivinen, tai nollan kohdalla nolla), ja kokonaislukueksponenttiin, joka talletetaan osoittimen osoittamaan muistipaikkaan.
Jos funktio palauttaa mantissan m ja eksponentin e, niin x = m × 2e. Jos x on nolla, niin sekä mantissa että eksponentti ovat 0. |
int ilogb(double x);
|
[C99] Palauttaa luvun x logaritmin, jonka kantaluku on float.h:n FLT_RADIX (yleensä 2), kokonaislukuna.
|
double ldexp(double mantissa, int eksponentti);
|
Koostaa liukuluvun mantissasta ja eksponentista. Jos mantissa on m ja eksponentti e, niin laskee m × 2e. Mantissan määrittelyaluetta ei ole rajattu (edes frexp:n mukaisesti). |
double log(double x);
|
Luonnollinen logaritmi. Laskee luvun x luonnollisen logaritmin. Funktion määrittelyalue vaatii, että x on positiivinen. |
double log1p(double x);
|
[C99] Laskee luvun x + 1 luonnollisen logaritmin. Teoriassa yhtä kuin log(x + 1), mutta tarkempi. |
double log2(double x);
|
[C99] Laskee luvun x logaritmin kantaluvulla 2. Funktion määrittelyalue vaatii, että x on positiivinen. |
double logb(double x);
|
[C99] Laskee luvun x logaritmin, jonka kantaluku on float.h:n FLT_RADIX (yleensä 2). Funktion määrittelyalue vaatii, että x on positiivinen.
|
double log10(double x);
|
10-kantainen logaritmi. Laskee luvun x logaritmin kantaluvulla 10. Funktion määrittelyalue vaatii, että x on positiivinen. |
double modf(double x, double *koko);
|
Pilkkoo liukuluvun kokonaisosaan ja desimaaliosaan. Palauttaa desimaaliosan, kun taas kokonaisosa talletetaan osoittimen osoittamaan muistipaikkaan.
Molempien osien etumerkki on sama kuin luvun x. |
double scalbn(double mantissa, int eksponentti);
|
[C99] Koostaa liukuluvun mantissasta ja eksponentista. Jos mantissa on m ja eksponentti e, niin laskee m × be, jossa b on float.h:n FLT_RADIX (yleensä 2). Mantissan määrittelyaluetta ei ole rajattu (edes frexp:n mukaisesti).
|
double scalbln(double mantissa, long eksponentti);
|
[C99] Koostaa liukuluvun mantissasta ja eksponentista. Jos mantissa on m ja eksponentti e, niin laskee m × be, jossa b on float.h:n FLT_RADIX (yleensä 2). Mantissan määrittelyaluetta ei ole rajattu (edes frexp:n mukaisesti).
|
Potenssifunktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double cbrt(double x);
|
[C99] Kuutiojuuri. Laskee luvun x kuutiojuuren. |
double hypot(double x, double y);
|
[C99] Laskee hypotenuusan pituuden, kun kateettien pituudet ovat x ja y. Teoriassa sama kuin sqrt(x * x + y * y), mutta tarkempi. |
double pow(double x, double y);
|
Potenssi. Nostaa luvun x y:nteen potenssiin. Jos x on negatiivinen, y:n on oltava kokonaisluku. |
double sqrt(double x);
|
Neliöjuuri. Laskee luvun x neliöjuuren. Funktion määrittelyalue vaatii, ettei x ole negatiivinen. |
Muut erikoisfunktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double erf(double x);
|
[C99] Virhefunktio (ks. Wikipedia). |
double erfc(double x);
|
[C99] Virhefunktion komplementti. |
double lgamma(double x);
|
[C99] Gammafunktion (itseisarvon luonnollinen) logaritmi. |
double tgamma(double x);
|
[C99] Gammafunktio. |
Pyöristys ja jakojäännös
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double ceil(double x);
|
Pyöristää luvun x ylöspäin kokonaisluvuksi. Jos se on jo kokonaisluku, palauttaa sellaisenaan. |
double fabs(double x);
|
Itseisarvo. Palauttaa luvun x itseisarvon. |
double floor(double x);
|
Pyöristää luvun x alaspäin kokonaisluvuksi. Jos se on jo kokonaisluku, palauttaa sellaisenaan. |
double fmod(double x, double y);
|
Jakojäännös. Palauttaa lukujen x ja y jakojäännöksen. y ei saa olla nolla.
Jos osamäärä x/y pyöristettynä nollaa kohti on q, niin |
double nearbyint(double x);
|
[C99] Pyöristää luvun x kokonaisluvuksi float.h:n fegetround :n mukaisesti. Ei johda FE_INEXACT (ks. float.h) -poikkeukseen, vaikka tulos ei ole tarkka.
|
double remainder(double x, double y);
|
[C99] Jakojäännös. Palauttaa lukujen x ja y jakojäännöksen. y ei saa olla nolla. Voi antaa eri tuloksen kuin fmod.
Jos osamäärä x/y pyöristettynä lähintä kokonaislukua kohti (puolikkaat kohti parillista kokonaislukua) on q, niin
|
double rint(double x);
|
[C99] Pyöristää luvun x kokonaisluvuksi float.h:n fegetround :n mukaisesti. Voi johtaa FE_INEXACT (ks. float.h) -poikkeukseen, mikäli tulos ei ole tarkka.
|
double round(double x);
|
[C99] Pyöristää luvun x kokonaisluvuksi matemaattisin säännöin (lähimpään, puolikkaat poispäin nollasta). Jos se on jo kokonaisluku, palauttaa sellaisenaan. |
double trunc(double x);
|
[C99] Pyöristää luvun x nollaa kohti kokonaisluvuksi. Jos se on jo kokonaisluku, palauttaa sellaisenaan. |
Muut funktiot
[muokkaa | muokkaa wikitekstiä]Funktio | Selitys |
---|---|
double copysign(double x, double y);
|
[C99] Korvaa luvun x etumerkin luvun y etumerkillä ja palauttaa tuloksena saadun luvun. |
double fdim(double x, double y);
|
[C99] Jos x > y, laskee x - y, muuten palauttaa nollan. |
double fma(double x, double y, double z);
|
[C99] Laskee x × y + z. Teoriassa yhtä kuin x * y + z , mutta tarkempi.
Määrittelemällä makron |
double fmax(double x, double y);
|
[C99] Palauttaa suuremman luvun, joko x tai y. |
double fmin(double x, double y);
|
[C99] Palauttaa pienemmän luvun, joko x tai y. |
double nan(const char *nimi);
|
[C99] Palauttaa 'hiljaisen' epäluvun. Jos nimi on tyhjä merkkijono, palauttaa tavallisen epäluvun; muuten riippuu toteutuksesta. |
double nextafter(double x, double y);
|
[C99] Jos x = y, palauttaa y. Jos x < y, palauttaa pienimmän luvun, joka on suurempi kuin x. Jos x > y, palauttaa suurimman luvun, joka on pienempi kuin x. |
Makrot
[muokkaa | muokkaa wikitekstiä]HUGE_VAL
on suurin arvo, jonka voi tallettaa double-tyyppiseen liukulukumuuttujaan. Funktio voi palauttaa HUGE_VAL tai -HUGE_VAL, mikäli arvo olisi liian suuri esitettäväksi.
C99-standardissa määritellään myös
INFINITY NAN
eli ääretön ja epäluku; molempien tietotyyppi on float.
Luvun luokittelu
[muokkaa | muokkaa wikitekstiä][Lisätty C99-standardissa]
Makro | Palautusarvo |
---|---|
fpclassify(x) |
|
isfinite(x) | Jokin muu luku kuin nolla, jos x on äärellinen luku, muuten nolla. |
isinf(x) | Jokin muu luku kuin nolla, jos x on ääretön, muuten nolla. |
isnan(x) | Jokin muu luku kuin nolla, jos x on epäluku, muuten nolla. |
isnormal(x) | Jokin muu luku kuin nolla, jos x on normaali liukuluku, muuten nolla. |
signbit(x) | Jokin muu luku kuin nolla, jos x on negatiivinen (mukaan lukien liukulukujen negatiivinen nolla), muuten nolla. |
Turvallinen vertailu
[muokkaa | muokkaa wikitekstiä][Lisätty C99-standardissa]
Nämä makrot eivät koskaan aiheuta liukulukupoikkeuksia (ks. Virheenkäsittely-osio).
Makro | Yhtä kuin |
---|---|
isgreater(x, y) | x > y
|
isgreaterequal(x, y) | x >= y
|
isless(x, y) | x < y
|
islessequal(x, y) | x <= y
|
islessgreater(x, y) | x < y || x > y
|
isunordered(x, y) | — Palauttaa 1 jos x ja y eivät ole missään järjestyksessä, 0 muuten |
Virheenkäsittely
[muokkaa | muokkaa wikitekstiä][Lisätty C99-standardissa]