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» для максимального масштаба. Масштаб, равный нулю, приводит к округлению результатов до ближайшего целого числа. Так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 -
π, вы знаете это. Половина от Тау
-
tau -
Равно 2π, или число радиан в окружности
Используйте их без ведущего $ — pi - 3 должно быть примерно 0.
Функции
math поддерживает следующие функции:
-
abs -
абсолютное значение, со знаком плюс
-
acos -
арккосинус
-
asin -
арксинус
-
atan -
арктангенс
-
atan2 -
арктангенс от двух переменных
-
bitand, bitor and bitxor -
выполняет побитовые операции. Они отбросят любые дробные части и интерпретируют остаток как целое число.
-
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 и вычисляет выражения без участия внешних команд.
Вам не нужно использовать -- перед выражением, даже если оно начинается с минуса, который в противном случае может быть интерпретирован как недопустимая опция. Если вы всё же вставите -- перед выражением, это остановит сканирование опций, как и для любой другой команды, и оно не будет частью выражения.
© 2022 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.5/cmds/math.html