Spec-Zone.ru › Fish 3.6

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API