math - выполнение математических вычислений
Резюме
math [(-s | --scale) N] [(-b | --base) BASE] EXPRESSION ...
Описание
math выполняет математические вычисления. Он поддерживает простые операции, такие как сложение, вычитание и т. д., а также функции, такие как abs(), sqrt() и ln().
По умолчанию вывод отображается с точностью до 6 десятичных знаков. Чтобы изменить количество десятичных знаков, используйте опцию --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, возвращаемое status значение равно нулю (успех), иначе единице.
Синтаксис
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π, вы это знаете. Половина от Тaу
tauравно 2π или числу радиан в окружности
Используйте их без ведущего $ - pi - 3 должно быть примерно 0.
Функции
math поддерживает следующие функции:
absмодуль, со знаком плюс
acosарккосинус
asinарксинус
atanарктангенс
atan2арктангенс двух переменных
bitand, bitor and bitxorвыполняет побитовые операции. Эти операции отбросят любые дробные части и интерпретируют остальное как целое число.
Примечание:
bitnotиbitnandне существуют. Это связано с тем, что числа в математике не имеют разрядности в смысле бит, и эти операции обязательно учитывают ведущие нули.Если вам нужно изменить знак определенного числа, вы можете сделать это с помощью исключения с маской, например:
> 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экспоненциальная функция по основанию е
facфакториал — также известен как
x!(x * (x - 1) * (x - 2) * ... * 1)floorокругляет число до ближайшего целого вниз
lnлогарифм по основанию е
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.7/cmds/math.html