Все математические функции Arduino | AlexGyver
Приспичило в проекте использовать логарифм, полез читать – наткнулся на полный список математических функций, которые встроены в Arduino (файл math.h). Привожу его здесь с переводом на русский, пользуйтесь!
Примечание: double
это тип данных для чисел с плавающей точкой, занимает 8 байт. float
– то же самое, но 4 байта. Arduino поддерживает только 4 байтные числа, т.е. для неё double
== float
. Соответственно некоторые функции из таблицы ниже получаются “дублирующие” при использовании на Arduino.
Константы
Константа | Результат | Описание |
M_E | 2.![]() | Число e |
M_LOG2E | 1.442695041 | log_2 e |
M_LOG10E | 0.434294482 | log_10 e |
M_LN2 | 0.693147181 | log_e 2 |
M_LN10 | 2.302585093 | log_e 10 |
M_PI | 3.141592654 | pi |
M_PI_2 | 1.570796327 | pi/2 |
M_PI_4 | 0.785398163 | pi/4 |
M_1_PI | 0.318309886 | 1/pi |
M_2_PI | 0.636619772 | 2/pi |
M_2_SQRTPI | 1.![]() | 2/корень(pi) |
M_SQRT2 | 1.414213562 | корень(2) |
M_SQRT1_2 | 0.707106781 | 1/корень(2) |
NAN | __builtin_nan(“”) | nan |
INFINITY | __builtin_inf() | infinity |
Функции
Функция | Описание |
cos (double x) | Косинус (радианы) |
sin (double x) | Синус (радианы) |
tan (double x) | Тангенс (радианы) |
fabs (double x) | Модуль для float чисел |
fmod (double x, double y) | Остаток деления x на у для float |
modf (double x, double *iptr) | Возвращает дробную часть, целую хранит по адресу iptr http://cppstudio.![]() |
modff (float x, float *iptr) | То же самое, но для float |
sqrt (double x) | Корень квадратный |
sqrtf (float) | Корень квадратный для float чисел |
cbrt (double x) | Кубический корень |
hypot (double x, double y) | Гипотенуза ( корень(x*x + y*y) ) |
square (double x) | Квадрат ( x*x ) |
floor (double x) | Округление до целого вниз |
ceil (double x) | Округление до целого вверх |
frexp (double x, int *pexp) | http://cppstudio.![]() |
cosh (double x) | Косинус гиперболический (радианы) |
sinh (double x) | Синус гиперболический (радианы) |
tanh (double x) | Тангенс гиперболический (радианы) |
acos (double x) | Арккосинус (радианы) |
asin (double x) | Арксинус (радианы) |
atan (double x) | Арктангенс (радианы) |
atan2 (double y, double x) | Арктангенс (y / x) (позволяет найти квадрант, в котором находится точка) |
log (double x) | Натуральный логарифм х ( ln(x) ) |
log10 (double x) | Десятичный логарифм x ( log_10 x) |
pow (double x, double y) | Степень ( x^y ) |
isnan (double x) | Проверка на nan (1 да, 0 нет) |
isinf (double x) | Возвр.![]() |
isfinite (double x) | Возвращает ненулевое значение только в том случае, если аргумент имеет конечное значение |
copysign (double x, double y) | Возвращает x со знаком y (знак имеется в виду + -) |
signbit (double x) | Возвращает ненулевое значение только в том случае, если _X имеет отрицательное значение |
fdim (double x, double y) | Возвращает разницу между x и y, если x больше y, в противном случае 0 |
fma (double x, double y, double z) | Возвращает x*y + z |
fmax (double x, double y) | Возвращает большее из чисел |
fmin (double x, double y) | Возвращает меньшее из чисел |
trunc (double x) | Возвращает целую часть числа с дробной точкой |
round (double x) | Математическое округление |
lround (double x) | Математическое округление (для больших чисел) |
lrint (double x) | Округляет указанное значение с плавающей запятой до ближайшего целого значения, используя текущий режим округления и направление |
Далее уже от самих разработчиков Arduino есть ещё маленький пакетик удобных макро-функций!
Макро | Значение |
min(a,b) | Возвращает меньшее из чисел |
max(a,b) | Возвращает большее из чисел |
abs(x) | Модуль числа |
constrain(value,min,max) | Ограничить диапазон числа value до min и max |
map(val, fromMin, fromMax, toMin, toMax) | Перевести диапазон числа value от (fromMin, fromMax) в (toMin, toMax) |
round(x) | Математическое округление |
radians(deg) | Перевод градусов в радианы |
degrees(rad) | Перевод радиан в градусы |
sq(x) | Квадрат числа |
PI | Пи |
HALF_PI | пол Пи |
TWO_PI | дваПи |
DEG_TO_RAD | Константа перевода град в рад 0.![]() |
RAD_TO_DEG | Константа перевода рад в град 57.2957786 |
math.h — frwiki.wiki
math.h — это группа функций из стандартной библиотеки C, которая позволяет использовать набор основных математических функций с использованием чисел с плавающей запятой . Различные стандарты C реализуют их по-разному, но всегда остаются обратно совместимыми. Большинство этих функций также доступны в стандартной библиотеке C ++ , хотя и в отдельном заголовке (заголовки C включены, но только для совместимости).
Резюме
- 1 Обзор функций
- 1.1 Среда с плавающей точкой
- 1.2 Комплексные числа
- 1.3 Генерация случайных чисел
- 2 библиотеки в минуту
- 3 Примечания и ссылки
- 4 Внешние ссылки
Обзор функций
Большинство функций содержится в заголовке math.h (или в заголовке cmath в C ++). Функции, которые работают с целыми числами, такие как abs , labs , div или ldiv , указаны в stdlib.
Все функции, которые включают углы, используют радиан как единицу измерения.
Не все функции присутствуют в версии C89 стандарта C. Для тех, которые есть, функции принимают только тип double для операций с числами с плавающей запятой. В стандарте C99 это ограничение было снято путем введения новой серии функций, работающих с параметрами типа float или long double . Эти функции могут быть обозначены суффиксом f или l соответственно .
Функция | Описание | |
---|---|---|
abs labs llabs | вычисляет абсолютное значение целого числа | |
fabs | вычислить абсолютное значение числа типа float | |
div ldiv lldiv | вычислить частное и остаток от евклидова деления | |
fmod | остаток от деления чисел с плавающей запятой | |
remainder | подписанный остаток от операции деления | |
remquo | остается подписанным, а также последние три бита операции деления | |
fma | Умножить, затем сложить (Умножить-накопить) | |
fmax | максимум два значения с плавающей запятой | |
fmin | минимум два значения с плавающей запятой | |
fdim | положительная разница двух значений с плавающей запятой | |
nan nanf nanl | Возвращает не-число (NaN) | |
Экспоненциальные функции | exp | возвращает e в запрошенной степени |
exp2 | возвращает 2 в запрошенной степени | |
expm1 | возвращает e high до запрошенной мощности минус 1 | |
log | вычислить натуральный логарифм (по основанию е) | |
log2 | вычислить двоичный логарифм (по основанию 2) | |
log10 | вычислить десятичный логарифм (по основанию 10) | |
log1p | вычислить натуральный логарифм (с основанием е) 1 плюс заданное число | |
ilogb | извлекает экспоненту числа | |
logb | извлекает экспоненту числа | |
Силовые функции | sqrt | вычислить квадратный корень |
cbrt | вычислить кубический корень | |
hypot | вычислить квадратный корень из суммы квадратов двух заданных чисел | |
pow | возвести число в указанную степень | |
Тригонометрические функции | sin | вычислить синус |
cos | вычислить косинус | |
tan | вычислить касательную | |
asin | вычислить арксинус | |
acos | вычислить арккосинус | |
atan | вычислить арктангенс | |
atan2 | вычислить арктангенс, используя знак для определения квадранта | |
Гиперболические функции | sinh | вычислить гиперболический синус |
cosh | вычислить гиперболический косинус | |
tanh | вычислить гиперболический тангенс | |
asinh | вычислить дугу гиперболического синуса | |
acosh | вычислить гиперболический арккосинус | |
atanh | вычислить гиперболический арктангенс | |
Функция ошибки и гамма-функция | erf | вычислить функцию ошибок |
erfc | вычислить дополнительную функцию ошибок | |
lgamma | вычислить натуральный логарифм модуля гамма-функции | |
tgamma | вычислить гамма-функцию | |
Операции округления | ceil | возвращает ближайшее большее целое число |
floor | возвращает ближайшее меньшее целое число | |
trunc | возвращает ближайшее целое число, абсолютное значение которого меньше | |
round lround llround | возвращает ближайшее целое число, следуя правилам округления | |
nearbyint | возвращает ближайшее целое число, используя текущий метод округления | |
rint lrint llrint | возвращает ближайшее целое число, используя текущий метод округления, за исключением случаев, когда результат отличается | |
Функции для управления числами с плавающей запятой | frexp | разложите параметр на число и степень двойки |
ldexp | умножить число на число в степени 2 | |
modf | разлагает число на целое и дробную часть.![]() | |
scalbn scalbln | умножить число на FLT_RADIX в заданной степени | |
nextafter nexttoward | возвращает следующее значение, которое может быть представлено как плавающая точка | |
copysign | копирует знак числа с плавающей запятой | |
Классификация | fpclassify | классифицирует значение с плавающей запятой |
isfinite | проверяет, имеет ли данное число конечное значение | |
isinf | проверяет, имеет ли данное число бесконечное значение | |
isnan | проверьте, является ли данное число NaN | |
isnormal | проверьте, является ли данный номер нормальным | |
signbit | проверяет, является ли данное число отрицательным |
Среда с плавающей запятой
C99 добавляет несколько функций и типов для более точного управления средой с плавающей запятой.
Функция | Описание |
---|---|
feclearexcept | удалить исключения (C99) |
fegetenv | сохраняет текущую среду (C99) |
fegetexceptflag | сохранить флаги состояния (C99) |
fegetround | получить текущее направление округления (C99) |
feholdexcept | сохранить текущую среду и очистить исключения (C99) |
feraiseexcept | вызвать исключение (C99) |
fesetenv | настраивает среду (C99) |
fesetexceptflag | устанавливает флаг состояния (C99) |
fesetround | выберите направление округления (C99) |
fetestexcept | проверить, не возникли ли какие-либо исключения (C99) |
feupdateenv | восстановить среду, сохраняя поднятые исключения (C99) |
Комплексные числа
C99 добавляет новое ключевое слово _Complex (и сложный макрос для удобства), который используется для обработки комплексных чисел. Они представлены в виде двух чисел с плавающей запятой.
C ++ не обеспечивает обратной совместимости для комплексных чисел, но предоставляет класс std :: complex .
Все операции с комплексными числами определены в заголовке complex.h . Что касается функций с целыми числами, суффиксы f и l представляют собой варианты функции, использующие комплексный тип float и длинный двойной комплексный типы соответственно .
Функция | Описание | |
---|---|---|
Основные операции | cabs | рассчитать абсолютное значение (C99) |
carg | вычислить аргумент (C99) | |
cimag | возвращает мнимую часть комплексного числа (C99) | |
creal | возвращает действительную часть комплексного числа (C99) | |
conj | возвращает сопряжение комплексного числа (C99) | |
cproj | вычислить проекцию комплексного числа на сферу Римана (C99) | |
Экспоненциальные операции | cexp | вычислить экспоненту комплексного числа (C99) |
clog | вычислить логарифм комплексного числа (C99) | |
csqrt | вычислить квадратный корень комплексного числа (C99) | |
cpow | вычислить мощность комплексного числа (С99) | |
Тригонометрические операции | csin | вычислить синус комплексного числа (C99) |
ccos | вычислить косинус комплексного числа (C99) | |
ctan | вычислить тангенс комплексного числа (C99) | |
casin | вычислить арксинус комплексного числа (C99) | |
cacos | вычислить арккосинус комплексного числа (C99) | |
catan | вычислить арктангенс комплексного числа (C99) | |
Гиперболические операции | csinh | вычислить гиперболический синус комплексного числа (C99) |
ccosh | вычислить гиперболический косинус комплексного числа (C99) | |
ctanh | вычислить гиперболический тангенс комплексного числа (C99) | |
casinh | вычислить гиперболический арксинус комплексного числа (C99) | |
cacosh | вычислить гиперболический арккосинус комплексного числа (C99) | |
catanh | вычислить гиперболический арктангенс комплексного числа (C99) |
Генерация случайных чисел
Заголовок stdlib. h ( cstdlib в C ++) определяет несколько функций, которые можно использовать для генерации статических случайных чисел.
Функция | Описание |
---|---|
rand | генерирует псевдослучайное число |
srand | инициализирует генератор псевдослучайных чисел |
libm
В Linux и FreeBSD математические функции (объявленные в math.h ) сгруппированы отдельно в математической библиотеке libm . Так что, если какие — либо из этих функций используется, -lm директива должна быть добавлена к линкеру.
Примечания и ссылки
- ↑ (in) Спецификация ISO / IEC 9899: 1999 ( читать онлайн ) , стр. 212, § 7.12.
- ↑ (in) Стивен Прата , приоритет C над: включает индекс , Sams Publishing,, 959 с. ( ISBN 0-672-32696-5 ) , Приложение B, Раздел V: Стандартная библиотека ANSI C с дополнениями C99.
- ↑ (in) Спецификация ISO / IEC 9899: 1999 ( читать онлайн ) , стр. 212, § 7.12.
- ↑ Стивен Прата , C primer plus: Includes Index , Sams Publishing,, 959 с. ( ISBN 0-672-32696-5 ) , Приложение B, Раздел VIII: Расширения числовых вычислений C99.
- ↑ (in) Стивен Прата , приоритет C над: включает индекс , Sams Publishing,, 959 с.
( ISBN 0-672-32696-5 ) , Приложение B, Раздел VIII: Расширения числовых вычислений C99.
- ↑ « Библиотека GNU C — ISO Random » (по состоянию на 18 июля 2018 г. ) .
- (fr) Эта статья частично или полностью взята из статьи в Википедии на английском языке, озаглавленной « Математические функции C » ( см. список авторов ) .
Внешние ссылки
- math.h : математические объявления — Справочник по базовым определениям , Единая спецификация UNIX® , выпуск 7 от The Open Group
- Справочник C по математическим функциям
функций Math.h в библиотеке C | Темы Scaler
Учебник по C
Функции Math.h в библиотеке C
Функции Math. h в библиотеке C
Язык программирования C был разработан для поддержки структурного программирования, поскольку он предназначен для работы с большими программными системами. Стандартная библиотека C включала группу функций, определенных в заголовочном файле, которые поддерживают основные потребности разработчиков в создании решений и эффективном решении проблемы с нужным уровнем абстракции. Один из наиболее часто используемых заголовков в стандартной библиотеке C — это предопределенные функции в модуле math.h, который определяет общие математические функции.
Важные функции библиотеки C math.h
Выполнение математических операций является частой задачей при формулировании исполняемого решения в форме программы C. Вычисления лежат в основе всех программных систем, поэтому язык программирования должен предоставлять набор необходимых символов для выражения режима вычислений. В попытке минимизировать размер языка в ядре определены операции высшего уровня — операторы отношения, арифметические операторы и логические операторы — в то время как различные расширения могут выполняться с помощью стандартной библиотеки C.
В таблице обобщается набор важных математических функций, определенных в заголовочном файле math.h.
Математические обозначения | Подпись функции | Описание | |
---|---|---|---|
⌈x⌉\lceil x \rceil⌈x⌉ | double ceil(double x) | функция, возвращающая наименьшее целое значение, большее или равное xxx, типа double | |
⌊x⌋\lfloor x \rfloor⌊x⌋ | double floor(double x) | функция, возвращающая наибольшее целочисленное значение, меньшее или равное xxx, типа double | |
IxxxI | double fabs(double) | функция, вычисляющая абсолютное значение xxx типа double | |
ln (x)\ln(x)ln(x) | double log(double x) | функция, вычисляющая натуральный логарифм xxx | |
log10(x)\log_{10}(x)log10(x) | 9005 3 double log10(double x)функция, вычисляющая логарифм xxx по основанию 10 9{-1}(x)cos−1(x) | double acos(double x) | функция, вычисляющая арккосинус xxx |
tanh(x)\tanh(x)tanh(x) | double tanh( double x) | функция, которая оценивает гиперболический тангенс в точке xxx |
Заголовок math. h также предоставляет набор предопределенных констант/макросов, обобщенных в таблице ниже.
Символ | Выражение |
---|---|
M_E | eee |
M_LOG2E | log2(e)\log_2(e)log2(e) |
M_LOG10E 9 0054 | log10(e)\log_{10}(e)log10(e) |
M_LN2 | ln(2)\ln(2)ln(2) |
M_L N10 | ln(10)\ln(10)ln(10) |
M_PI | π\piπ |
M_PI_2 | π2\frac{\pi}{2}2π |
M_PI_4 | π4\frac{\pi}{4}4π |
M_1_PI | 1π\frac{1}{\pi}π1 |
M_2_PI | 2π\frac{2}{\pi}π2 |
M_2_SQRTPI | 2π\sqrt{\frac{2}{\pi}}π2 |
M_SQRT2 | 2\sqrt{2}2 |
M_SQRT1_2 | 12\frac{1}{\sqrt{2}}21 |
Давайте рассмотрим несколько простых примеров и ознакомимся с тем, как мы можем использовать предопределенные математические функции в math. h.
Пример кода: ceil, floor и fabs
Приведенный выше код дает следующий результат:
Пример кода: log и log10
Результат приведенного выше кода выглядит следующим образом:
Пример кода: sqrt, exp и pow
90 004 Вычисление кода даст нам:Пример кода: cos, acos и tanh
Вычисление некоторых тригонометрических выражений даст:
Пример кода: modf и fmod
Вычисление кода даст:
Резюме
- Дизайн C был экономичным, потому что он дает вам необходимые инструменты для решения вашей проблемы, не создавая слишком большого «раздувания» вашей системы.
- Стандартная библиотека C предоставляет набор инструментов, расширяющих язык C для достаточного решения имеющейся проблемы.
- Заголовочный файл math.h содержит набор математических функций, позволяющих решать задачи на достаточном уровне абстракции. Другими словами, если вы хотите выразить функцию double pow(double x, double y), вам не нужно думать о реализации функции, которая выполняет вычисления для pow(), вместо этого вы можете добавить библиотеку и использовать функцию.