|
John D. Cook в статье [1] сравнивает списки функций в заголовочном файле math.h языка C четырех версий: ISO (ANSI) pre-1999 ("старый" ISO, стандарт до 1999 года), ISO post-1999 (ISO C99, начиная с 1999 года), POSIX и Microsoft Visual Studio (MSVC). Самый маленький список функций в стандарте ISO до 1999 года. Все другие списки полностью содержат поддержку оригинального стандарта ISO.
Последние стандарты POSIX и ISO в сущности идентичны. Различие только в том, что стандарт POSIX требует функции Бесселя первого рода j0, j1 и jn, и функции Бесселя второго рода y0, y1 и yn.
Microsoft поддерживает старый стандарт ISO и вышеупомянутые функции Бесселя. Также Microsoft поддерживает некоторые функции, добавленные в стандарт ISO в 1999. Microsoft дала имена этим новым функциям, как и в стандарте ISO, но с префиксом подчеркивания. Есть небольшое исключение из этого правила - функция Microsoft, соответствующая ISO-функции fpclassify, получила имя _fpclass вместо _fpclassify.
Поддержка реализации функций в различных библиотеках показана в таблице ниже.
| Функция |
POSIX |
Старый ISO |
ISO C99 |
MSVC |
Примечания |
| acos |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| acosh |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(1) |
| asin |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| asinh |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(1) |
| atan |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| atan2 |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| atanh |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(1) |
| cbrt |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| ceil |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| copysign |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_copysign |
| cos |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| cosh |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| erf |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(2) |
| erfc |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| exp |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| exp2 |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| expm1 |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(2) |
| fabs |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| fdim |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| floor |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| fma |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| fmax |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| fmin |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| fmod |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| fpclassify |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_fpclass |
| frexp |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| hypot |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_hypot |
| ilogb |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isfinite |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(3) |
| isgreater |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isgreaterequal |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isinf |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isless |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| islessequal |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| islessgreater |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isnan |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_isnan |
| isnormal |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| isunordered |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| j0 |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_j0 |
| j1 |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_j1 |
| jn |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_jn |
| ldexp |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| lgamma |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(2) |
| llrint |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| llround |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| log |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| log10 |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| log1p |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(2) |
| log2 |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| logb |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_logb |
| lrint |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| lround |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| modf |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| nan |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| nearbyint |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| nextafter |
ЕСТЬ |
нет |
ЕСТЬ |
ЕСТЬ |
_nextafter |
| nexttoward |
нет |
нет |
ЕСТЬ |
нет |
|
| pow |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| remainder |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| remquo |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| rint |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| round |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| scalbln |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| scalbn |
нет |
нет |
ЕСТЬ |
нет |
|
| signbit |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| sin |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| sinh |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| sqrt |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| tan |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| tanh |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
ЕСТЬ |
|
| tgamma |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
(2) |
| trunc |
ЕСТЬ |
нет |
ЕСТЬ |
нет |
|
| y0 |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_y0 |
| y1 |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_y1 |
| yn |
ЕСТЬ |
нет |
нет |
ЕСТЬ |
_yn |
Примечания:
(1) Обратные гиперболические функции могут быть приведены к более знакомым функциям.
asinh(x) = log(x + sqrt(x2 + 1)) acosh(x) = log(x + sqrt(x2 – 1)) atanh(x) = (log(1+x) – log(1-x))/2
(2) Имеется автономный код [2] для следующих функций: erf, expm1, log1p, lgamma, tgamma.
(3) Вы можете проверить, равно ли число NaN самому себе. Выражение (x == x) вернет true только если x не NaN (см. [3]).
[Ссылки]
1. Math.h in POSIX, ISO, and Visual Studio site:johndcook.com. 2. Stand-alone code for numerical computing site:johndcook.com. 3. IEEE floating-point exceptions in C++ site:johndcook.com. |