Поддержка математических функций для чисел с плавающей запятой
Универсальная библиотека среды выполнения 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 , atanl , atan2 , 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 , copysignl , _copysign , _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 , hypotl , _hypot , _hypotf , _hypotl |
Вычисляет гипотенузу |
ilogb , ilogbf , ilogbl |
Вычисляет показатель степени целого числа по основанию 2 |
imaxabs |
Вычисляет абсолютное значение целого числа |
imaxdiv |
Вычисляет частное и остаток от деления двух целочисленных значений |
isfinite , _finite , _finitef |
Определяет, является ли значение конечным |
isgreater , isgreaterequal , isless , islessequal , 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 , logl , log10 , 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 , scalbnl , scalbln , 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 по категориям
Примитивы с плавающей запятой
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по