math - 数学計算を実行する

概要

math [(-s | --scale) N] [(-b | --base) BASE] [(-m | --scale-mode) MODE] EXPRESSION ...

説明

math は数学計算を実行します。加算、減算などの単純な演算に加えて、 abs()sqrt()ln() などの関数をサポートしています。

デフォルトでは、結果は小数点以下 6 桁まで表示されます。小数点以下の桁数を変更するには、 --scale オプションを使用します。整数で出力する場合は --scale=0 を指定します。

式の評価よりも前にパラメータ展開が行われる点に注意してください。これはシェル変数やコマンド置換の結果を用いた計算を行う際に非常に便利ですが、同時に括弧( () )やアスタリスク( * )のグロブ文字をエスケープするか引用符で囲む必要があることも意味します。乗算を表すために x を使用することもできますが、16 進数と区別するために後ろに空白を入れる必要があります。

関数の括弧は省略可能です。例えば math sin pi0 を出力します。ただし、カンマは内側の関数に結合するため、 math pow sin 3, 5 はエラーになります( sin に引数 35 を渡そうとするため)。迷った場合は、括弧を使用してください。

math は引数間の空白を無視し、入力を複数の引数として受け取ります(内部的にはスペースで結合されます)。そのため、 math 2 +2math "2 +    2" は同じように動作します。ただし、 math 2 2 (演算子がない状態)はエラーとなります。

注釈

math は利便性のために提供されている、簡単な用途向けのシンプルなツールです。実装を単純にするために内部で浮動小数点数(float)として処理されており、本格的な計算機ができることのすべてができるわけではありません。制限を感じる場合は、より多機能なツールを使用してください。

以下のオプションが利用可能です。

-s N--scale N

結果のスケール(小数点以下の桁数)を設定します。 N は整数、または最大スケールを表す "max" である必要があります。スケールを 0 に設定すると、デフォルトで結果は切り捨てられます。整数以外の部分は破棄されます。そのため、デフォルトの 3/2 は、 1.5 の一般的な四捨五入結果である 2 ではなく 1 を返します。これは、fish 3.0.0 より前にこのコマンドのベースとなっていた bc との互換性を保つためです。スケール値が 0 より大きい場合、結果は一般的な規則(四捨五入など)に従って指定された桁数に丸められます。

-b BASE--base BASE

出力に使用する数値の基数を設定します( math は入力としての 16 進数を常に理解します)。現在、16 進数として "hex" 、 "16" 、8 進数として "octal" 、 "8" を指定できます。このオプションを指定するとスケールは強制的に 0 になり(他のスケールを指定するとエラーになります)、結果は切り捨てられて整数になります。この仕様は将来変更される可能性があります。16 進数は 0x プレフィックス付きで出力されます。8 進数は 0 プレフィックス付きで出力されますが、現在の math は 8 進数での入力を理解しません。

-m MODE--scale-mode MODE

スケールの動作を設定します。 MODE には truncate (切り捨て)、 round (四捨五入)、 floor (床関数/切り下げ)、 ceiling (天井関数/切り上げ)を指定できます。デフォルトのスケールモードは、スケールが 0 以外の場合は round 、スケールが 0 の場合は truncate です。

-h--help

このコマンドのヘルプを表示します。

戻り値

式の評価に成功し、オーバーフロー/アンダーフローが発生せず、かつ NaN(非数)を返さない場合、終了ステータスは 0(成功)になります。それ以外の場合は 1 になります。

構文

math はいくつかの演算子、定数、関数を認識し、(当然ながら)数値を読み取ることができます。

数値において、ロケールに関わらず基数文字(小数点)は常に . です( 2,5 ではなく 2.5 )。科学的記数法( 10e5 )や16進数( 0xFF )も利用可能です。

math では、数字をグループ化して見やすくするためのセパレータとしてアンダースコアを使用できます。例えば、 1_000_0000x_89_AB_CD_EF1.234_567_e89 と記述できます。

演算子

math は以下の演算子を認識します。

+

加算

-

減算

*x

乗算。 * はグロブ文字であるため、引用符で囲むかエスケープする必要があります。 x は、後ろに空白を入れないと16進数表記の 0x のように見えてしまうため注意が必要です。

/

除算

^

べき乗

%

剰余(余り)

()

グループ化。 () はコマンド置換を意味するため、引用符で囲むかエスケープする必要があります。

これらはすべて中置記法で使用されます(例: + 5 2 ではなく 5 + 2 )。

定数

math は以下の定数を認識します。

e

ネイピア数(オイラー数)

pi

円周率(π)。おなじみの定数です。Tau(タウ)の半分です。

tau

2πに相当します。つまり円のラジアン数です。

先頭に $ を付けずに使用してください(例: pi - 3 は約 0 になります)。

関数

math は以下の関数をサポートしています。

abs

絶対値(正の符号を伴う値)

acos

逆余弦(アークコサイン)

asin

逆正弦(アークサイン)

atan

逆正接(アークタンジェント)

atan2

2つの変数に対する逆正接(アークタンジェント)

bitand, bitor および bitxor

ビット演算を行います。これらの関数は整数以外の部分を切り捨て、残りを整数(int)として解釈します。

注意: bitnot および bitnand は存在しません。これは、 math における数値にはビット単位の「幅」という概念が実質的になく、これらの演算には先行ゼロ(leading zeroes)の考慮が不可欠であるためです。

特定の数値を反転(否定)させる必要がある場合は、マスク値との 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を底とする自然対数

loglog10

10を底とする常用対数。任意の底 b における対数を計算するには、 log(x) / log(b) を使用してください。

log2

2を底とする 2 進対数

max

与えられた数値の中で最大値を返します。任意の数の引数を取ることができます(ただし、少なくとも 1 つ以上必要です)。

min

与えられた数値の中で最小値を返します。任意の数の引数を取ることができます(ただし、少なくとも 1 つ以上必要です)。

ncr

組み合わせ(コンビネーション)。n 個の中から r 個を選ぶ組み合わせの数(順序は考慮しません)を返します。

npr

順列(パーミュテーション)。n 個の中から r 個を選ぶ順列の数(順序を考慮します)を返します。

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 / 61.666667 を出力します。

math -s0 10.0 / 6.01 を出力します。

math -s3 10 / 61.667 を出力します。

math "sin(pi)"0 を出力します。

math 5 \* 2math "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 1920xc0 を表示します。

math 'ncr(49,6)' は 13983816 を表示します。これは「49 個の中から 6 個選ぶ」ロトの全組み合わせ数です。

math max 5,2,3,1 は 5 を表示します。

互換性に関する注意

fish 1.x および 2.x リリースでは、 math 式の処理を bc コマンドに依存していました。 fish 3.0.0 以降、fish は tinyexpr ライブラリを使用し、外部コマンドを介さずに式を評価します。

式がマイナス記号で始まる場合でも、式の前に -- を置く必要はありません(マイナス記号が無効なオプションとして解釈されることはありません)。もし式の前に -- を挿入した場合、他のコマンドと同様にオプションのスキャンがそこで停止し、その -- 自体は式の一部とはみなされません。