Программирование PC Math.h в POSIX, ISO и Visual Studio Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Math.h в POSIX, ISO и Visual Studio Печать
Добавил(а) microsin   

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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page