Поддержка математических функций для чисел с плавающей запятой
Универсальная библиотека среды выполнения C (UCRT) предоставляет множество функций математики с плавающей запятой, включая все функции, необходимые ISO C99. Функции с плавающей запятой предназначены для балансировки производительности и правильности. Так как получение правильно округленного результата может оказаться неоправданно дорогим, эти функции позволяют получить значение, максимально приближенное к правильно округленному результату. В большинстве случаев результат производится в пределах +/-1 ULP (единица наименьшей точности) правильно округленного результата, хотя в некоторых случаях может возникнуть больше неточностей.
Для iso C Standard 11 (C11) и более поздних <tgmath.h>
версий заголовок, помимо включения <math.h>
и <complex.h>
, предоставляет макросы, вызывающие соответствующую математические функции на основе типов параметров. Дополнительные сведения см . в разделе "Математика с универсальным типом".
Во многих функциях математической библиотеки с плавающей точкой используются различные реализации разной архитектуры ЦП. Например, в 32-разрядных CRT x86 могут использоваться не такие реализации, как в 64-разрядных CRT x64. Кроме того, некоторые функции могут содержать сразу несколько реализаций заданной архитектуры ЦП. Наиболее эффективная реализация выбирается в среде выполнения динамически в зависимости от того, какие наборы инструкций поддерживает ЦП. Например, в 32-разрядных CRT x86 некоторые функции включают сразу две реализации — x87 и SSE2. При работе на ЦП, который поддерживает SSE2, используется более быстрая реализация SSE2. При запуске на ЦП, который не поддерживает SSE2, используется медленная реализация x87. Так как различные реализации функций математической библиотеки могут использовать для получения результатов различные инструкции ЦП и разнообразные алгоритмы, эти функции могут давать различные результаты на разных ЦП. В большинстве случаев результаты находятся в пределах +/-1 ULP правильно округленного результата, но фактические результаты могут отличаться по ЦП.
Предыдущие 16-разрядные версии Microsoft C/C++ и Microsoft Visual C++ поддерживали тип long double
как тип данных с плавающей точкой 80-битной точности. В более поздних версиях Visual C++ тип данных long double
представляет собой тип данных с плавающей запятой 64-битной точности, идентичный типу double
. Компилятор обрабатывает long double
и double
как различные типы данных, однако функции long double
идентичны своим аналогам, double
. Для обеспечения совместимости с исходным кодом ISO C99 в CRT предоставляются long double
-версии математических функций, однако следует иметь в виду, что двоичное представление может быть не таким, как в других компиляторах.
Поддерживаемые математические функции для чисел с плавающей запятой
Маршрут | Использование |
---|---|
abs , , labs llabs _abs64 |
Вычисляет абсолютное значение целого числа |
acos , , acosf acosl |
Вычисляет арккосинус |
acosh , , acoshf acoshl |
Вычисляет гиперболический арккосинус |
asin , , asinf asinl |
Вычисляет арксинус |
asinh , , asinhf asinhl |
Вычисляет гиперболический арксинус |
atan , , atanf atan2 atanl atan2f ,atan2l |
Вычисляет арктангенс |
atanh , , atanhf atanhl |
Вычисляет гиперболический арктангенс |
_atodbl , _atodbl_l |
Преобразует строку для языкового стандарта в строку double |
atof , _atof_l |
Преобразует строку в double |
_atoflt , , _atoflt_l _atoldbl _atoldbl_l |
Преобразует строку для языкового стандарта в или float long double |
cbrt , , cbrtf cbrtl |
Вычисляет кубический корень |
ceil , , ceilf ceill |
Вычисляет с округлением вверх |
_chgsign , , _chgsignf _chgsignl |
Вычисляет аддитивную инверсию |
_clear87 , _clearfp |
Получает и сбрасывает реестр состояния блока операций с плавающей запятой |
_control87 , , _controlfp __control87_2 |
Получает и задает управляющее слово блока операций с плавающей запятой |
_controlfp_s |
Безопасная версия _controlfp |
copysign , , copysignf _copysign copysignl _copysignf ,_copysignl |
Возвращает значение, которое имеет абсолютное значение одного аргумента и знак другого |
cos , , cosf cosl |
Вычисляет синус |
cosh , , coshf coshl |
Вычисляет гиперболический синус |
div , , ldiv lldiv |
Вычисляет частное и остаток от деления двух целочисленных значений |
_ecvt , ecvt |
Преобразует объект double в строку |
_ecvt_s |
Безопасная версия _ecvt |
erf , , erff erfl |
Вычисляет функцию ошибок |
erfc , , erfcf erfcl |
Вычисляет дополнительную функцию ошибок |
exp , , expf expl |
Вычисляет экспоненту ex |
exp2 , , exp2f exp2l |
Вычисляет экспоненту 2x |
expm1 , , expm1f expm1l |
Вычисляет ex-1 |
fabs , , fabsf fabsl |
Вычисляет абсолютное значение типа с плавающей запятой |
_fcvt , fcvt |
Преобразует число с плавающей запятой в строку |
_fcvt_s |
Безопасная версия _fcvt |
fdim , , fdimf fdiml |
Определяет положительную разность между двумя значениями |
feclearexcept |
Сбрасывает указанные исключения с плавающей запятой |
fegetenv |
Хранит текущую среду с плавающей запятой |
fegetexceptflag |
Получает состояние указанных исключений с плавающей запятой |
fegetround |
Получает режим округления чисел с плавающей запятой |
feholdexcept |
Задает безостановочный режим исключений с плавающей запятой |
feraiseexcept |
Вызывает указанные исключения с плавающей запятой |
fesetenv |
Задает текущую среду с плавающей запятой |
fesetexceptflag |
Задает флаги состояния указанных чисел с плавающей запятой |
fesetround |
Задает режим округления указанных чисел с плавающей запятой |
fetestexcept |
Определяет, какие флаги состояния исключения с плавающей запятой заданы |
feupdateenv |
Восстанавливает среду с плавающей запятой, а затем вызывает предыдущее исключение |
floor , , floorf floorl |
Вычисляет с округлением вниз |
fma , , fmaf fmal |
Вычисляет склеенную операцию умножения-сложения |
fmax , , fmaxf fmaxl |
Вычисляет максимальное значение аргументов |
fmin , , fminf fminl |
Вычисляет минимум аргументов |
fmod , , fmodf fmodl |
Вычисляет остаток с плавающей запятой |
_fpclass , _fpclassf |
Возвращает классификацию значения с плавающей запятой |
fpclassify |
Возвращает классификацию значения с плавающей запятой |
_fpieee_flt |
Задает обработчик исключений с плавающей запятой |
_fpreset |
Сбрасывает среду с плавающей запятой |
frexp , , frexpf frexpl |
Получает мантиссу и показатель степени числа с плавающей запятой |
_gcvt , gcvt |
Преобразует число с плавающей запятой в строку |
_gcvt_s |
Безопасная версия _gcvt |
_get_FMA3_enable , _set_FMA3_enable |
Получает или задает флаг для использования инструкций FMA3 в 64-разрядной среде |
hypot , , hypotf _hypot hypotl _hypotf ,_hypotl |
Вычисляет гипотенузу |
ilogb , , ilogbf ilogbl |
Вычисляет показатель степени целого числа по основанию 2 |
imaxabs |
Вычисляет абсолютное значение целого числа |
imaxdiv |
Вычисляет частное и остаток от деления двух целочисленных значений |
isfinite , , _finite _finitef |
Определяет, является ли значение конечным |
isgreater , , isgreaterequal islessequal isless islessgreater ,isunordered |
Сравнивает порядок двух значений с плавающей запятой |
isinf |
Определяет, является ли значение с плавающей запятой бесконечным |
isnan , , _isnan _isnanf |
Проверяет значение с плавающей запятой для NaN |
isnormal |
Проверяет, является ли значение с плавающей запятой конечным и не субнормальным |
_j0 , , _j1 _jn |
Вычисляет функцию Бесселя |
ldexp , , ldexpf ldexpl |
Вычисляет x*2n |
lgamma , , lgammaf lgammal |
Вычисляет натуральный логарифм абсолютного значения гамма-функции |
llrint , , llrintf llrintl |
Округляет значение с плавающей запятой до ближайшего long long значения. |
llround , , llroundf llroundl |
Округляет значение с плавающей запятой до ближайшего long long значения. |
log , , logf log10 logl log10f ,log10l |
Вычисляет натуральный логарифма или логарифм по основанию 10 |
log1p , , log1pf log1pl |
Вычисляет натуральный логарифм числа 1+x |
log2 , , log2f log2l |
Вычисляет логарифм по основанию 2 |
logb , , logbf logbl , _logb _logbf |
Возвращает показатель степени значения с плавающей запятой |
lrint , , lrintf lrintl |
Округляет значение с плавающей запятой до ближайшего long значения. |
_lrotl , _lrotr |
Чередует целочисленное значение влево или вправо |
lround , , lroundf lroundl |
Округляет значение с плавающей запятой до ближайшего long значения. |
_matherr |
Обработчик математических ошибок по умолчанию |
__max |
Макрос, который возвращает большее из двух значений |
__min |
Макрос, который возвращает меньшее из двух значений |
modf , , modff modfl |
Разбивает значение с плавающей запятой на дробную и целую части |
nan , , nanf nanl |
Возвращает несигнальное значение NaN (QNaN) |
nearbyint , , nearbyintf nearbyintl |
Возвращает округленное значение |
nextafter , , nextafterf nextafterl , _nextafter _nextafterf |
Возвращает следующее представимое значение с плавающей запятой |
nexttoward , , nexttowardf nexttowardl |
Возвращает следующее представимое значение с плавающей запятой |
pow , , powf powl |
Возвращает значение x y |
remainder , , remainderf remainderl |
Вычисляет остаток от частного двух значений с плавающей запятой |
remquo , , remquof remquol |
Вычисляет остаток от деления двух целочисленных значений |
rint , , rintf rintl |
Округляет значение с плавающей запятой |
_rotl , , _rotl64 _rotr _rotr64 |
Чередует биты в целочисленных типах |
round , , roundf roundl |
Округляет значение с плавающей запятой |
_scalb , _scalbf |
Масштабирует аргумент по степени числа 2 |
scalbn , , scalbnf scalbln scalbnl scalblnf ,scalblnl |
Умножает число с плавающей запятой на целочисленную мощность FLT_RADIX |
_set_controlfp |
Задает управляющее слово блока операций с плавающей запятой |
_set_SSE2_enable |
Включает или отключает инструкции SSE2 |
signbit |
Проверяет знаковый бит значения с плавающей запятой |
sin , , sinf sinl |
Вычисляет синус |
sinh , , sinhf sinhl |
Вычисляет гиперболический синус |
sqrt , , sqrtf sqrtl |
Вычисляет квадратный корень |
_status87 , , _statusfp _statusfp2 |
Получает слово состояния модуля операций с плавающей запятой |
strtof , _strtof_l |
Преобразует строку в float |
strtold , _strtold_l |
Преобразует строку в long double |
tan , , tanf tanl |
Вычисляет тангенс |
tanh , , tanhf tanhl |
Вычисляет гиперболический тангенс |
tgamma , , tgammaf tgammal |
Вычисляет гамма-функцию |
trunc , , truncf truncl |
Усекает дробную часть |
_wtof , _wtof_l |
Преобразует широкую строку в double |
_y0 , , _y1 _yn |
Вычисляет функцию Бесселя |
См. также
Универсальные подпрограммы среды выполнения C по категориям
Примитивы с плавающей запятой