math.h

Поделись знанием:
Перейти к: навигация, поиск
Стандартная библиотека
языка программирования С

math.h — заголовочный файл стандартной библиотеки языка программирования С, разработанный для выполнения простых математических операций. Большинство функций привлекают использование чисел с плавающей точкой. C++ также реализует данные функции для обеспечения совместимости, все они содержатся в заголовочном файле cmath.

Все эти функции принимают double, если не определено иначе. Для работы с типами float и long double используются функции с постфиксами f и l соответственно. Все функции, принимающие или возвращающие угол, работают с радианами.





Базовые функции

Имя Описание
abs Возвращает абсолютную величину целого числа
acos арккосинус
asin арксинус
atan арктангенс
atan2 арктангенс с двумя параметрами
ceil округление до ближайшего большего целого числа
cos косинус
random выводит случайное число от 0 до аргумента функции.
exp вычисление экспоненты
fabs абсолютная величина (числа с плавающей точкой)
floor округление до ближайшего меньшего целого числа
fmod вычисление остатка от деления нацело для чисел с плавающей точкой
frexp разбивает число с плавающей точкой на мантиссу и показатель степени.
ldexp умножение числа с плавающей точкой на целую степень двух
log натуральный логарифм
log10 логарифм по основанию 10
modf(x,p) извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой
pow(x,y) результат возведения x в степень y, xy
sin синус
sinh гиперболический синус
sqrt квадратный корень
tan тангенс
tanh гиперболический тангенс

Функции стандарта C++

Имя Описание
acosh гиперболический арккосинус
asinh гиперболический арксинус
atanh гиперболический арктангенс
cbrt кубический корень
copysign(x,y) возвращает величину, абсолютное значение которой равно x, но знак которой соответствует знаку y
erf функция ошибок
erfc дополнительная функция ошибок
exp2(x) значение числа 2, возведённого в степень x, 2x
expm1(x) значение функции ex − 1
fdim(x,y) вычисление положительной разницы между x и y, fmax(xy, 0)
fma(x,y,z) значение функции (x * y) + z (см. FMA)
fmax(x,y) наибольшее значение среди x и y
fmin(x,y) наименьшее значение среди x и y
hypot(x,y) гипотенуза, sqrt(x² + y²)
ilogb экспонента числа с плавающей точкой, конвертированная в int
lgamma натуральный логарифм абсолютного значения гамма-функции
llrint округление до ближайшего целого (возвращает long long)
lrint округление до ближайшего целого (возвращает long)
llround округление до ближайшего целого в направлении от нуля (возвращает long long)
lround округление до ближайшего целого в направлении от нуля (возвращает long)
log1p(x) натуральный логарифм 1 + x
log2 логарифм по основанию 2
logb целочисленная часть логарифма x по основанию 2
nan(s) возвращает нечисловое значение 'Not a Number'
nearbyint округление аргумента до целого значения в формате числа с плавающей точкой
nextafter(x,y) следующий ближайшее представимое для x (по направлению к y)
nexttoward(x,y) то же, что и nextafter, но y имеет тип long double
remainder(x,y) вычисляет остаток от деления согласно стандарту IEC 60559
remquo(x,y,p) то же, что и remainder, но сохраняет коэффициент по указателю p (как int)
rint округление до целого (возвращает int) с вызовом ошибки inexact, если результат отличается от аргумента.
round округление до целого (возвращает double)
scalbln(x,n) x * FLT_RADIXn (n is long)
scalbn(x,n) x * FLT_RADIXn (n is int)
tgamma гамма-функция
trunc отбрасывание дробной части

Расширения XSI

Эти функции не описаны в стандартах ANSI или ISO C, но могут присутствовать в системах в качестве расширений X/Open.

Имя Описание
j0(x) значение функций Бесселя первого рода порядков 0 для аргумента x
j1(x) значение функций Бесселя первого рода порядков 1 для аргумента x
jn(n,x) значение функций Бесселя первого рода порядка n
scalb(x,y) x * FLT_RADIXy (x и y типа double)
y0(x) значение функций Бесселя второго рода порядков 0 для аргумента x
y1(x) значение функций Бесселя второго рода порядков 1 для аргумента x
yn(n,x) значение функций Бесселя второго рода порядка n

Использование функций конвертации double-string ecvt, fcvt и gcvt не рекомендуется в пользу sprintf.

libm

Под Linux и FreeBSD математические функции (объявленные в math.h) хранятся отдельно в математической библиотеке libm. Таким образом, если любая из этих инструкций используется, при сборке линкеру должна быть передана опция -lm.

Существует несколько реализаций libm, включая:

  • GNU libc's [www.gnu.org/software/libc/manual/html_node/Mathematics.html libm]
  • Sun's [www.netlib.org/fdlibm/readme FDLIBM], которая была использована как основа для FreeBSD's [svnweb.freebsd.org/base/head/lib/msun/ msun], которая, в свою очередь, является основой Julia's [github.com/JuliaLang/openlibm OpenLibm]
  • Arénaire project’s [lipforge.ens-lyon.fr/www/crlibm/ CRlibm] (Correctly Rounded mathematical library)
  • AMD's [developer.amd.com/tools-and-sdks/cpu-development/cpu-libraries/libm/ libm]

Напишите отзыв о статье "Math.h"

Ссылки

  • [www.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html math.h] — основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group  (англ.)
  • [www.dinkumware.com/manuals/?manual=compleat&page=math.html Справка по функциям math.h]
  • [www.opennet.ru/docs/RUS/mlib/ Математическая библиотека libm]  (рус.)

Отрывок, характеризующий Math.h

– Впрочем, большое количество монастырей и церквей есть всегда признак отсталости народа, – сказал Наполеон, оглядываясь на Коленкура за оценкой этого суждения.
Балашев почтительно позволил себе не согласиться с мнением французского императора.
– У каждой страны свои нравы, – сказал он.
– Но уже нигде в Европе нет ничего подобного, – сказал Наполеон.
– Прошу извинения у вашего величества, – сказал Балашев, – кроме России, есть еще Испания, где также много церквей и монастырей.
Этот ответ Балашева, намекавший на недавнее поражение французов в Испании, был высоко оценен впоследствии, по рассказам Балашева, при дворе императора Александра и очень мало был оценен теперь, за обедом Наполеона, и прошел незаметно.
По равнодушным и недоумевающим лицам господ маршалов видно было, что они недоумевали, в чем тут состояла острота, на которую намекала интонация Балашева. «Ежели и была она, то мы не поняли ее или она вовсе не остроумна», – говорили выражения лиц маршалов. Так мало был оценен этот ответ, что Наполеон даже решительно не заметил его и наивно спросил Балашева о том, на какие города идет отсюда прямая дорога к Москве. Балашев, бывший все время обеда настороже, отвечал, что comme tout chemin mene a Rome, tout chemin mene a Moscou, [как всякая дорога, по пословице, ведет в Рим, так и все дороги ведут в Москву,] что есть много дорог, и что в числе этих разных путей есть дорога на Полтаву, которую избрал Карл XII, сказал Балашев, невольно вспыхнув от удовольствия в удаче этого ответа. Не успел Балашев досказать последних слов: «Poltawa», как уже Коленкур заговорил о неудобствах дороги из Петербурга в Москву и о своих петербургских воспоминаниях.
После обеда перешли пить кофе в кабинет Наполеона, четыре дня тому назад бывший кабинетом императора Александра. Наполеон сел, потрогивая кофе в севрской чашке, и указал на стул подло себя Балашеву.
Есть в человеке известное послеобеденное расположение духа, которое сильнее всяких разумных причин заставляет человека быть довольным собой и считать всех своими друзьями. Наполеон находился в этом расположении. Ему казалось, что он окружен людьми, обожающими его. Он был убежден, что и Балашев после его обеда был его другом и обожателем. Наполеон обратился к нему с приятной и слегка насмешливой улыбкой.
– Это та же комната, как мне говорили, в которой жил император Александр. Странно, не правда ли, генерал? – сказал он, очевидно, не сомневаясь в том, что это обращение не могло не быть приятно его собеседнику, так как оно доказывало превосходство его, Наполеона, над Александром.
Балашев ничего не мог отвечать на это и молча наклонил голову.
– Да, в этой комнате, четыре дня тому назад, совещались Винцингероде и Штейн, – с той же насмешливой, уверенной улыбкой продолжал Наполеон. – Чего я не могу понять, – сказал он, – это того, что император Александр приблизил к себе всех личных моих неприятелей. Я этого не… понимаю. Он не подумал о том, что я могу сделать то же? – с вопросом обратился он к Балашеву, и, очевидно, это воспоминание втолкнуло его опять в тот след утреннего гнева, который еще был свеж в нем.
– И пусть он знает, что я это сделаю, – сказал Наполеон, вставая и отталкивая рукой свою чашку. – Я выгоню из Германии всех его родных, Виртембергских, Баденских, Веймарских… да, я выгоню их. Пусть он готовит для них убежище в России!
Балашев наклонил голову, видом своим показывая, что он желал бы откланяться и слушает только потому, что он не может не слушать того, что ему говорят. Наполеон не замечал этого выражения; он обращался к Балашеву не как к послу своего врага, а как к человеку, который теперь вполне предан ему и должен радоваться унижению своего бывшего господина.
– И зачем император Александр принял начальство над войсками? К чему это? Война мое ремесло, а его дело царствовать, а не командовать войсками. Зачем он взял на себя такую ответственность?
Наполеон опять взял табакерку, молча прошелся несколько раз по комнате и вдруг неожиданно подошел к Балашеву и с легкой улыбкой так уверенно, быстро, просто, как будто он делал какое нибудь не только важное, но и приятное для Балашева дело, поднял руку к лицу сорокалетнего русского генерала и, взяв его за ухо, слегка дернул, улыбнувшись одними губами.
– Avoir l'oreille tiree par l'Empereur [Быть выдранным за ухо императором] считалось величайшей честью и милостью при французском дворе.
– Eh bien, vous ne dites rien, admirateur et courtisan de l'Empereur Alexandre? [Ну у, что ж вы ничего не говорите, обожатель и придворный императора Александра?] – сказал он, как будто смешно было быть в его присутствии чьим нибудь courtisan и admirateur [придворным и обожателем], кроме его, Наполеона.
– Готовы ли лошади для генерала? – прибавил он, слегка наклоняя голову в ответ на поклон Балашева.
– Дайте ему моих, ему далеко ехать…
Письмо, привезенное Балашевым, было последнее письмо Наполеона к Александру. Все подробности разговора были переданы русскому императору, и война началась.


После своего свидания в Москве с Пьером князь Андреи уехал в Петербург по делам, как он сказал своим родным, но, в сущности, для того, чтобы встретить там князя Анатоля Курагина, которого он считал необходимым встретить. Курагина, о котором он осведомился, приехав в Петербург, уже там не было. Пьер дал знать своему шурину, что князь Андрей едет за ним. Анатоль Курагин тотчас получил назначение от военного министра и уехал в Молдавскую армию. В это же время в Петербурге князь Андрей встретил Кутузова, своего прежнего, всегда расположенного к нему, генерала, и Кутузов предложил ему ехать с ним вместе в Молдавскую армию, куда старый генерал назначался главнокомандующим. Князь Андрей, получив назначение состоять при штабе главной квартиры, уехал в Турцию.