Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Универсальная библиотека среды выполнения 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 правильно округленного результата, но фактические результаты могут отличаться по ЦП.
Более новые версии UCRT могут повысить точность и точность функций математической библиотеки с плавающей запятой. Так как UCRT является частью операционной системы Windows, вы можете получить различные результаты для этих функций в разных версиях операционной системы или между сборками отладки и выпуска. Хотя это не рекомендуется, вы можете статически связаться с UCRT, чтобы гарантировать согласованные результаты, если вам нужны эти функции, будут производить одинаковые результаты везде.
Предыдущие 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, , labsllabs_abs64 |
Вычисляет абсолютное значение целого числа |
acos, , acosfacosl |
Вычисляет арккосинус |
acosh, , acoshfacoshl |
Вычисляет гиперболический арккосинус |
asin, , asinfasinl |
Вычисляет арксинус |
asinh, , asinhfasinhl |
Вычисляет гиперболический арксинус |
atan, , atanfatanlatan2atan2f,atan2l |
Вычисляет арктангенс |
atanh, , atanhfatanhl |
Вычисляет гиперболический арктангенс |
_atodbl, _atodbl_l |
Преобразует строку для языкового стандарта в строку double |
atof, _atof_l |
Преобразует строку в double |
_atoflt, , _atoflt_l_atoldbl_atoldbl_l |
Преобразует строку для языкового стандарта в или floatlong double |
cbrt, , cbrtfcbrtl |
Вычисляет кубический корень |
ceil, , ceilfceill |
Вычисляет с округлением вверх |
_chgsign, , _chgsignf_chgsignl |
Вычисляет аддитивную инверсию |
_clear87, _clearfp |
Получает и сбрасывает реестр состояния блока операций с плавающей запятой |
_control87, , _controlfp__control87_2 |
Получает и задает управляющее слово блока операций с плавающей запятой |
_controlfp_s |
Безопасная версия _controlfp |
copysign, , copysignfcopysignl_copysign_copysignf,_copysignl |
Возвращает значение, которое имеет абсолютное значение одного аргумента и знак другого |
cos, , cosfcosl |
Вычисляет синус |
cosh, , coshfcoshl |
Вычисляет гиперболический синус |
div, , ldivlldiv |
Вычисляет частное и остаток от деления двух целочисленных значений |
_ecvt, ecvt |
Преобразует объект double в строку |
_ecvt_s |
Безопасная версия _ecvt |
erf, , erfferfl |
Вычисляет функцию ошибок |
erfc, , erfcferfcl |
Вычисляет дополнительную функцию ошибок |
exp, , expfexpl |
Вычисляет экспоненту ex |
exp2, , exp2fexp2l |
Вычисляет экспоненту 2x |
expm1, , expm1fexpm1l |
Вычисляет ex-1 |
fabs, , fabsffabsl |
Вычисляет абсолютное значение типа с плавающей запятой |
_fcvt, fcvt |
Преобразует число с плавающей запятой в строку |
_fcvt_s |
Безопасная версия _fcvt |
fdim, , fdimffdiml |
Определяет положительную разность между двумя значениями |
feclearexcept |
Сбрасывает указанные исключения с плавающей запятой |
fegetenv |
Хранит текущую среду с плавающей запятой |
fegetexceptflag |
Получает состояние указанных исключений с плавающей запятой |
fegetround |
Получает режим округления чисел с плавающей запятой |
feholdexcept |
Задает безостановочный режим исключений с плавающей запятой |
feraiseexcept |
Вызывает указанные исключения с плавающей запятой |
fesetenv |
Задает текущую среду с плавающей запятой |
fesetexceptflag |
Задает флаги состояния указанных чисел с плавающей запятой |
fesetround |
Задает режим округления указанных чисел с плавающей запятой |
fetestexcept |
Определяет, какие флаги состояния исключения с плавающей запятой заданы |
feupdateenv |
Восстанавливает среду с плавающей запятой, а затем вызывает предыдущее исключение |
floor, , floorffloorl |
Вычисляет с округлением вниз |
fma, , fmaffmal |
Вычисляет склеенную операцию умножения-сложения |
fmax, , fmaxffmaxl |
Вычисляет максимальное значение аргументов |
fmin, , fminffminl |
Вычисляет минимум аргументов |
fmod, , fmodffmodl |
Вычисляет остаток с плавающей запятой |
_fpclass, _fpclassf |
Возвращает классификацию значения с плавающей запятой |
fpclassify |
Возвращает классификацию значения с плавающей запятой |
_fpieee_flt |
Задает обработчик исключений с плавающей запятой |
_fpreset |
Сбрасывает среду с плавающей запятой |
frexp, , frexpffrexpl |
Получает мантиссу и показатель степени числа с плавающей запятой |
_gcvt, gcvt |
Преобразует число с плавающей запятой в строку |
_gcvt_s |
Безопасная версия _gcvt |
_get_FMA3_enable, _set_FMA3_enable |
Получает или задает флаг для использования инструкций FMA3 в 64-разрядной среде |
hypot, , hypotfhypotl_hypot_hypotf,_hypotl |
Вычисляет гипотенузу |
ilogb, , ilogbfilogbl |
Вычисляет показатель степени целого числа по основанию 2 |
imaxabs |
Вычисляет абсолютное значение целого числа |
imaxdiv |
Вычисляет частное и остаток от деления двух целочисленных значений |
isfinite, , _finite_finitef |
Определяет, является ли значение конечным |
isgreater, , isgreaterequalislessislessequalislessgreater,isunordered |
Сравнение порядка двух значений с плавающей запятой |
isinf |
Определяет, является ли значение с плавающей запятой бесконечным |
isnan, , _isnan_isnanf |
Проверяет значение с плавающей запятой для NaN |
isnormal |
Проверяет, является ли значение с плавающей запятой конечным и не субнормальным |
_j0, , _j1_jn |
Вычисляет функцию Бесселя |
ldexp, , ldexpfldexpl |
Вычисляет x*2n |
lgamma, , lgammaflgammal |
Вычисляет натуральный логарифм абсолютного значения гамма-функции |
llrint, , llrintfllrintl |
Округляет значение с плавающей запятой до ближайшего long long значения. |
llround, , llroundfllroundl |
Округляет значение с плавающей запятой до ближайшего long long значения. |
log, , logflogllog10log10f,log10l |
Вычисляет натуральный логарифма или логарифм по основанию 10 |
log1p, , log1pflog1pl |
Вычисляет натуральный логарифм числа 1+x |
log2, , log2flog2l |
Вычисляет логарифм по основанию 2 |
logb, , logbflogbl, _logb_logbf |
Возвращает показатель степени значения с плавающей запятой |
lrint, , lrintflrintl |
Округляет значение с плавающей запятой до ближайшего long значения. |
_lrotl, _lrotr |
Чередует целочисленное значение влево или вправо |
lround, , lroundflroundl |
Округляет значение с плавающей запятой до ближайшего long значения. |
_matherr |
Обработчик математических ошибок по умолчанию |
__max |
Макрос, который возвращает большее из двух значений |
__min |
Макрос, который возвращает меньшее из двух значений |
modf, , modffmodfl |
Разбивает значение с плавающей запятой на дробную и целую части |
nan, , nanfnanl |
Возвращает несигнальное значение NaN (QNaN) |
nearbyint, , nearbyintfnearbyintl |
Возвращает округленное значение |
nextafter, , nextafterfnextafterl, _nextafter_nextafterf |
Возвращает следующее представимое значение с плавающей запятой |
nexttoward, , nexttowardfnexttowardl |
Возвращает следующее представимое значение с плавающей запятой |
pow, , powfpowl |
Возвращает значение xy |
remainder, , remainderfremainderl |
Вычисляет остаток от частного двух значений с плавающей запятой |
remquo, , remquofremquol |
Вычисляет остаток от деления двух целочисленных значений |
rint, , rintfrintl |
Округляет значение с плавающей запятой |
_rotl, , _rotl64_rotr_rotr64 |
Чередует биты в целочисленных типах |
round, , roundfroundl |
Округляет значение с плавающей запятой |
_scalb, _scalbf |
Масштабирует аргумент по степени числа 2 |
scalbn, , scalbnfscalbnlscalblnscalblnf,scalblnl |
Умножает число с плавающей запятой на целочисленную мощность FLT_RADIX |
_set_controlfp |
Задает управляющее слово блока операций с плавающей запятой |
_set_SSE2_enable |
Включает или отключает инструкции SSE2 |
signbit |
Проверяет знаковый бит значения с плавающей запятой |
sin, , sinfsinl |
Вычисляет синус |
sinh, , sinhfsinhl |
Вычисляет гиперболический синус |
sqrt, , sqrtfsqrtl |
Вычисляет квадратный корень |
_status87, , _statusfp_statusfp2 |
Получает слово состояния модуля операций с плавающей запятой |
strtof, _strtof_l |
Преобразует строку в float |
strtold, _strtold_l |
Преобразует строку в long double |
tan, , tanftanl |
Вычисляет тангенс |
tanh, , tanhftanhl |
Вычисляет гиперболический тангенс |
tgamma, , tgammaftgammal |
Вычисляет гамма-функцию |
trunc, , truncftruncl |
Усекает дробную часть |
_wtof, _wtof_l |
Преобразует широкую строку в double |
_y0, , _y1_yn |
Вычисляет функцию Бесселя |
См. также
Универсальные подпрограммы среды выполнения C по категориям
Примитивы с плавающей запятой