math - выполнение математических расчётов
Краткое описание
math [(-s | --scale) N] [(-b | --base) BASE] EXPRESSION ...
Описание
math выполняет математические вычисления. Она поддерживает простые операции, такие как сложение, вычитание и так далее, а также функции, такие как abs(), sqrt() и ln().
По умолчанию результат выводится в виде числа с плавающей точкой с отброшенными нулями в конце. Для получения фиксированного представления можно использовать опцию --scale, включая --scale=0 для целочисленного результата.
Обратите внимание, что подстановка параметров происходит до оценки выражений. Это может быть очень полезно для выполнения расчётов, связанных с переменными оболочки или результатами подстановки команд, но это также означает, что скобки (()) и символ звездочки (*) шаблона должны быть экранированы или заключены в кавычки. x также может использоваться для обозначения умножения, но после него должен следовать пробел, чтобы отличить его от шестнадцатеричных чисел.
Скобки для функций необязательны — math sin pi выводит 0. Однако запятая относится к внутренней функции, поэтому math pow sin 3, 5 — ошибка, так как она пытается передать sin аргументы 3 и 5. В случае сомнений используйте скобки.
math игнорирует пробелы между аргументами и принимает входные данные в виде нескольких аргументов (внутренне объединённых пробелом), поэтому math 2 +2 и math "2 + 2" работают одинаково. math 2 2 — ошибка.
Доступны следующие опции:
- -s N или --scale N
Устанавливает разрядность результата.
Nдолжно быть целым числом или словом «max» для максимальной разрядности. Разрядность 0 приводит к усечению результата, а не к его округлению. Любая дробная часть отбрасывается. Так,3/2возвращает1вместо2, которое1.5обычно округлило бы. Это для совместимости сbc, которая была основой этой команды до fish 3.0.0. Значения масштаба, большие нуля, приводят к округлению результата в соответствии с обычными правилами до указанного числа десятичных знаков.- -b BASE или --base BASE
Устанавливает систему счисления, используемую для вывода (
mathвсегда понимает шестнадцатеричные числа как входные). В настоящее время она понимает «hex» или «16» для шестнадцатеричной и «octal» или «8» для восьмеричной систем и подразумевает разрядность 0 (другие разрядности вызывают ошибку), поэтому результат будет усечён до целого числа. Это может измениться в будущем. Шестнадцатеричные числа будут выводиться с префиксом0x. Восьмеричные числа будут иметь префикс0, но не распознаютсяmathкак входные данные.- -h или --help
Отображает справку по использованию данной команды.
Возвращаемые значения
Если выражение успешно вычислено и не приводит к переполнению/потере точности или к NaN, возвращаемое значение равно нулю (успех), иначе единице.
Синтаксис
math знает некоторые операторы, константы, функции и, очевидно, может считывать числа.
Для чисел, . всегда является разделителем разрядов независимо от региональных настроек — 2.5, а не 2,5. Доступны также научная запись (10e5) и шестнадцатеричная запись (0xFF).
math позволяет использовать подчёркивания в качестве визуальных разделителей для группировки цифр. Например, можно записать 1_000_000, 0x_89_AB_CD_EF, и 1.234_567_e89.
Операторы
math знает следующие операторы:
+для сложения
-для вычитания
* or xдля умножения.
*— символ шаблона и должен быть заключен в кавычки или экранирован,xдолжен следовать пробел, иначе он будет восприниматься как0xшестнадцатеричная запись./для деления
^для возведения в степень
%для остатка от деления
( or )для группировки. Они должны быть заключены в кавычки или экранированы, поскольку
()обозначает подстановку команд.
Все они используются в инфиксной форме — 5 + 2, а не + 5 2.
Константы
math знает следующие константы:
eчисло Эйлера
piπ, вы знаете это. Половина от Тау.
tauравно 2π, или числу радиан в окружности
Используйте их без ведущего $ — pi - 3 должно быть около 0.
Функции
math поддерживает следующие функции:
absмодуль, со знаком «плюс»
acosарккосинус
asinарксинус
atanарктангенс
atan2арктангенс двух переменных
bitand, bitor and bitxorвыполняет побитовые операции. Эти операции отбросят любые нецелые части и интерпретируют остаток как целое число.
Примечание:
bitnotиbitnandне существуют. Это связано с тем, что числа в математике не имеют *ширины* в битах, а эти операции обязательно учитывают ведущие нули.Если вам нужно изменить знак конкретного числа, вы можете сделать это, выполнив XOR с маской, например:
> math --base=hex bitxor 0x0F, 0xFF 0xF0 > math --base=hex bitxor 0x2, 0x3 # Here we mask with 0x3 == 0b111, so our number is 3 bits wide # Only the 1 bit isn't set. 0x1
ceilокругляет число до ближайшего целого в большую сторону
cosкосинус
coshгиперболический косинус
expэкспоненциальная функция по основанию e
facфакториал — также известный как
x!(x * (x - 1) * (x - 2) * ... * 1)floorокругляет число до ближайшего целого в меньшую сторону
lnлогарифм по основанию e
log or log10логарифм по основанию 10
log2логарифм по основанию 2
maxвозвращает наибольшее из данных чисел — принимает любое количество аргументов (но не менее одного)
minвозвращает наименьшее из данных чисел — принимает любое количество аргументов (но не менее одного)
ncrфункция сочетаний «из n по r» — сколько подмножеств размера r можно взять из n (порядок не имеет значения)
nprколичество подмножеств размера r, которые можно взять из множества n элементов (включая различные порядки)
pow(x,y)возвращает x в степени y (и может быть записано как
x ^ y)roundокругляет до ближайшего целого, удаляя от 0
sinсинус
sinhгиперболический синус
sqrtквадратный корень — (также может быть записан как
x ^ 0.5)tanтангенс
tanhгиперболический тангенс
Все тригонометрические функции используют радианы (масштаб на основе π, а не 360°).
Примеры
math 1+1 выводит 2.
math $status - 128 выводит числовой код выхода последней команды минус 128.
math 10 / 6 выводит 1.666667.
math -s0 10.0 / 6.0 выводит 1.
math -s3 10 / 6 выводит 1.666.
math "sin(pi)" выводит 0.
math 5 \* 2 или math "5 * 2" или math 5 "*" 2 все выводят 10.
math 0xFF выводит 255, math 0 x 3 выводит 0 (поскольку вычисляет 0 умножить на 3).
math bitand 0xFE, 0x2e выводит 46.
math "bitor(9,2)" выводит 11.
math --base=hex 192 выводит 0xc0.
math 'ncr(49,6)' выводит 13983816 — это количество возможных комбинаций в лотерее «6 из 49».
math max 5,2,3,1 выводит 5.
Примечания по совместимости
Выпускаемые версии fish 1.x и 2.x полагались на команду bc для обработки выражений math. Начиная с fish 3.0.0, fish использует библиотеку tinyexpr и вычисляет выражение без участия внешних команд.
Вам не нужно использовать -- перед выражением, даже если оно начинается с минуса, который в противном случае может быть интерпретирован как неверная опция. Если вы вставите -- перед выражением, это вызовет остановку сканирования опций, как и для любой другой команды, и оно не будет частью выражения.
© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/math.html