WikiDer > C математические функции
Стандартная библиотека C |
---|
Общие темы |
Разные заголовки |
C математические операции являются группой функций в стандартная библиотека из Язык программирования C реализация основных математических функций.[1][2] Все функции используют плавающая точка числа так или иначе. Различные стандарты C предоставляют разные, хотя и обратно совместимые, наборы функций. Большинство этих функций также доступны в Стандартная библиотека C ++, хотя и в разных заголовках (заголовки C также включены, но только как устаревшая функция совместимости).
Обзор функций
Большинство математических функций определены в <math.h>
(<cmath>
заголовок в C ++). Функции, которые работают с целыми числами, например пресс
, лаборатории
, div
, и ldiv
, вместо этого определены в <stdlib.h>
заголовок (<cstdlib>
заголовок в C ++).
Любые функции, которые работают с углами, используют радианы как единица угла.[1]
Не все эти функции доступны в C89 версия стандарта. Для тех, что есть, функции принимают только тип двойной
для аргументов с плавающей запятой, что приводит к дорогостоящему преобразованию типов в коде, который иначе использовал одинарную точность плавать
значения. В C99 этот недостаток был исправлен путем введения новых наборов функций, работающих с плавать
и длинный двойной
аргументы. Эти функции обозначены ж
и л
суффиксы соответственно.[3]
Функция | Описание | |
---|---|---|
пресс лаборатории ллаб | вычисляет абсолютная величина целочисленного значения | |
фабрики | вычисляет абсолютное значение значения с плавающей запятой | |
div ldiv lldiv | вычисляет частное и остаток от целочисленное деление | |
fmod | остаток от операции деления с плавающей запятой | |
остаток | подписанный остаток от операции деления | |
remquo | знаковый остаток, а также три последних бита операции деления | |
фма | слитное умножение-сложение операция | |
fmax | большее из двух значений с плавающей запятой | |
fmin | меньшее из двух значений с плавающей запятой | |
fdim | положительная разница двух значений с плавающей запятой | |
Нан nanf нанл | возвращает не число (NaN) | |
Экспоненциальный функции | exp | возвращается е возведен в данную власть |
exp2 | возвращает 2 в заданной степени | |
expm1 | возвращает e в заданной степени минус один | |
бревно | вычисляет натуральный логарифм (к основанию е) | |
log2 | вычисляет двоичный логарифм (по базе 2) | |
log10 | вычисляет десятичный логарифм (по основанию 10) | |
log1p | вычисляет натуральный логарифм (по основанию e) 1 плюс заданное число | |
Ilogb | извлекает экспоненту числа | |
logb | извлекает экспоненту числа | |
Мощность функции | sqrt | вычисляет квадратный корень |
cbrt | вычисляет кубический корень | |
гипотеза | вычисляет квадратный корень из суммы квадратов двух заданных чисел | |
пау | увеличивает число до заданной степени[4] | |
Тригонометрический функции | грех | вычисляет синус |
потому что | вычисляет косинус | |
загар | вычисляет касательная | |
как в | вычисляет арксинус | |
acos | вычисляет арккосинус | |
загар | вычисляет арктангенс | |
atan2 | вычисляет арктангенс, используя знаки для определения квадрантов | |
Гиперболический функции | грех | вычисляет гиперболический синус |
шиш | вычисляет гиперболический косинус | |
танх | вычисляет гиперболический тангенс | |
asinh | вычисляет гиперболический арксинус | |
акоша | вычисляет гиперболический арккосинус | |
Атанх | вычисляет гиперболический арктангенс | |
Ошибка и гамма функции | Эрф | вычисляет функция ошибки |
erfc | вычисляет дополнительная функция ошибок | |
lgamma | вычисляет натуральный логарифм абсолютного значения гамма-функция | |
тгамма | вычисляет гамма-функцию | |
Ближайший целое число плавающий точка операции | потолок | возвращает ближайшее целое число не меньше заданного значения |
этаж | возвращает ближайшее целое число не больше заданного значения | |
усечение | возвращает ближайшее целое число, не превышающее по величине заданное значение | |
круглый lround все вокруг | возвращает ближайшее целое число, округляя от нуля в промежуточных случаях | |
поблизости | возвращает ближайшее целое число с использованием текущего режима округления | |
полоска lrint llrint | возвращает ближайшее целое число, используя текущий режим округления, за исключением случаев, когда результат отличается | |
Плавающий точка манипуляция функции | frexp | разлагает число на значащее и степень двойки |
ldexp | умножает число на 2 в степени | |
modf | разлагает число на целые и дробные части | |
скальбн скальблн | умножает число на FLT_RADIX в степени | |
следующий после рядом | возвращает следующее представимое значение с плавающей запятой по направлению к заданному значению | |
копия | копирует знак значения с плавающей запятой | |
Классификация | fpclassify | классифицирует данное значение с плавающей запятой |
бесконечен | проверяет, имеет ли данное число конечное значение | |
isinf | проверяет, бесконечно ли заданное число | |
Иснан | проверяет, является ли данное число NaN | |
это нормально | проверяет, является ли данный номер нормальным | |
знак | проверяет, является ли данное число отрицательным |
Среда с плавающей точкой
C99 добавляет несколько функций и типов для детального управления средой с плавающей запятой.[3] Эти функции можно использовать для управления множеством настроек, которые влияют на вычисления с плавающей запятой, например, режим округления, при каких условиях возникают исключения, когда числа сбрасываются до нуля и т. Д. Определены функции и типы среды с плавающей запятой. в <fenv.h>
заголовок (<cfenv>
в C ++).
Функция | Описание |
---|---|
очищаться, кроме | очищает исключения (C99) |
Fegetenv | хранит текущую среду с плавающей запятой (C99) |
fegetexceptflag | хранит флаги текущего состояния (C99) |
fegetround | извлекает текущее направление округления (C99) |
Feholdexcept | сохраняет текущую среду с плавающей запятой и очищает все исключения (C99) |
feraiseexcept | вызывает исключение с плавающей точкой (C99) |
fesetenv | устанавливает текущую среду с плавающей запятой (C99) |
fesetexceptflag | устанавливает флаги текущего состояния (C99) |
fesetround | устанавливает текущее направление округления (C99) |
праздник, кроме | проверяет, были ли вызваны определенные исключения (C99) |
feupdateenv | восстанавливает среду с плавающей запятой, но сохраняет текущие исключения (C99) |
Сложные числа
C99 добавляет новый _Сложный
ключевое слово (и сложный
макрос удобства), который обеспечивает поддержку комплексных чисел. Любой тип с плавающей запятой можно изменить с помощью сложный
, а затем определяется как пара чисел с плавающей запятой. Обратите внимание, что C99 и C ++ не реализуют комплексные числа совместимым с кодом способом - последний вместо этого предоставляет класс стандартное::сложный
.
Все операции с комплексными числами определены в <complex.h>
заголовок. Как и в случае с вещественными функциями, ж
или же л
суффикс обозначает поплавковый комплекс
или же длинный двойной комплекс
вариант функции.
Функция | Описание | |
---|---|---|
Базовый операции | такси | вычисляет абсолютная величина (C99) |
груз | вычисляет аргумент комплексного числа (C99) | |
cimag | вычисляет мнимая часть комплексного числа (C99) | |
Creal | вычисляет реальная часть комплексного числа (C99) | |
вычисляет комплексно сопряженный (C99) | ||
cproj | вычисляет сложную проекцию на Сфера Римана (C99) | |
Возведение в степень операции | cexp | вычисляет сложные экспоненциальный (C99) |
засорять | вычисляет сложные логарифм (C99) | |
csqrt | вычисляет сложные квадратный корень (C99) | |
cpow | вычисляет сложные мощность (C99) | |
Тригонометрический операции | csin | вычисляет сложные синус (C99) |
ccos | вычисляет сложные косинус (C99) | |
ctan | вычисляет сложные касательная (C99) | |
казино | вычисляет сложные арксинус (C99) | |
како | вычисляет сложные арккосинус (C99) | |
Катан | вычисляет сложные арктангенс (C99) | |
Гиперболический операции | csinh | вычисляет сложные гиперболический синус (C99) |
ccosh | вычисляет сложные гиперболический косинус (C99) | |
ctanh | вычисляет сложные гиперболический тангенс (C99) | |
казино | вычисляет сложные гиперболический арксинус (C99) | |
какош | вычисляет сложные гиперболический арккосинус (C99) | |
Катан | вычисляет сложные гиперболический арктангенс (C99) |
Еще несколько сложных функций «зарезервированы для будущего использования в C99».[5] Реализации предоставляются проектами с открытым исходным кодом, которые не являются частью стандартной библиотеки.
Функция | Описание | |
---|---|---|
Функции ошибок | Cerf | вычисляет комплекс функция ошибки (C99) |
Cerfc | вычисляет комплексный дополнительный функция ошибки (C99) |
Типовые функции
Заголовок <tgmath.h>
определяет типовой макрос для каждой математической функции, определенной в <math.h>
и <complex.h>
. Это добавляет ограниченную поддержку для перегрузка функции математических функций: одно и то же имя функции может использоваться с разными типами параметров; фактическая функция будет выбрана во время компиляции в соответствии с типами параметров.
Каждый типовой макрос, соответствующий функции, определенной как для действительных, так и для комплексных чисел, инкапсулирует в общей сложности 6 различных функций: плавать
, двойной
и длинный двойной
, и их сложный
варианты. Макросы универсального типа, соответствующие функции, определенной только для действительных чисел, инкапсулируют в общей сложности 3 различные функции: плавать
, двойной
и длинный двойной
варианты функции.
Язык C ++ включает встроенную поддержку перегрузки функций и, следовательно, не предоставляет <tgmath.h>
заголовок даже как функция совместимости.
Генерация случайных чисел
Заголовок <stdlib.h>
(<cstdlib>
в C ++) определяет несколько функций, которые можно использовать для генерации статистически случайных чисел.[6]
Функция | Описание |
---|---|
ранд | генерирует псевдослучайное число от 0 до RAND_MAX , включительно. |
srand | инициализирует генератор псевдослучайных чисел |
arc4random | генерирует псевдослучайное число от 0 до UINT32_MAX , обычно используя лучший алгоритм, чем ранд |
arc4random_uniform | генерирует псевдослучайное число от 0 до максимального значения. |
arc4random_buf | заполнить буфер псевдослучайным битовым потоком. |
arc4random_stir | инициализирует генератор псевдослучайных чисел. |
В arc4random
семейство функций случайных чисел не определено в стандарте POSIX, но встречается в некоторых общих libc
реализации. Раньше он относился к генератору потока ключей просочившейся версии RC4 шифр (отсюда "азаключенный RC4"), но другие алгоритмы, обычно из других шифров, например ChaCha20, были реализованы с момента использования того же имени.
Качество случайности от ранд
обычно слишком слабы, чтобы их можно было даже считать статистически случайными, и для этого требуется явное заполнение. Обычно рекомендуется использовать arc4random
вместо ранд
когда возможно. Некоторые библиотеки C реализуют ранд
с помощью arc4random_uniform
внутренне.
Реализации
Под POSIX такие системы, как Linux и BSD, математические функции (как указано в <math.h>
) поставляются отдельно в математической библиотеке libm
. Следовательно, если какая-либо из этих функций используется, компоновщику должна быть предоставлена директива -lm
. Есть разные libm
реализации, в том числе:
- GNU libcс libm
- AMDс libm
- Красная шляпас libm
- солнцес FDLIBM, на основе которого FreeBSDс мсун и OpenBSDс libm, оба из которых, в свою очередь, были основой Юляс OpenLibm
- муслс libm, основанный на библиотеках BSD и других проектах, таких как ARM
- Arénaire проекта CRlibm (правильно округленный libm) и его преемник MetaLibm. Использует Алгоритм Ремеза для автоматической генерации приближений, которые формально доказаны.
Реализации не обязательно под именем libm
включают:
- РУКАс оптимизированные математические процедуры
- GCE-Math это версия математических функций C / C ++, написанная для C ++
constexpr
(расчет во время компиляции) - SIMD (векторизованные) математические библиотеки включают СЛИФ, Yeppp!, и Агнер ТуманVCL, а также несколько программ с закрытым исходным кодом, таких как SVML и DirectXMath.[7]
Смотрите также
Рекомендации
- ^ а б ISO / IEC 9899: 1999 спецификация (PDF). п. 212, § 7.12.
- ^ Прата, Стивен (2004). C праймер плюс. Самс Паблишинг. Приложение B, раздел V: Стандартная библиотека ANSI C с дополнениями C99. ISBN 0-672-32696-5.
- ^ а б Прата, Стивен (2004). C праймер плюс. Самс Паблишинг. Приложение B, Раздел VIII: Усовершенствования числовых вычислений C99. ISBN 0-672-32696-5.
- ^ Условно может показаться удобным использовать pow (Икс, 2) или pow (Икс, 3) для вычисления квадратов или кубов. Однако в критичном ко времени коде это не рекомендуется. Если реализация не позаботится об этих случаях во время компиляции, Икс*Икс или же Икс*Икс*Икс будет выполняться намного быстрее. Также sqrt (Икс) и cbrt (Икс) следует предпочесть pow (Икс, .5) или pow (Икс,1./3).
- ^ man cerf (3), man cerfc (3), см., например, https://linux.die.net/man/3/cerf.
- ^ «Библиотека GNU C - ISO Random». Получено 18 июля 2018.
- ^ Кордес, Питер. "Интеллект - Где внутреннее" _mm256_pow_ps "Кланга?". Переполнение стека.
внешняя ссылка
Викибук Программирование на C есть страница по теме: Программирование на C / Справочник по C |
- Единая спецификация UNIX, Выпуск 7 из Открытая группа : математические объявления - Справочник по базовым определениям,
- Справочник C по математическим функциям