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 pi は 0 を出力します。ただし、カンマは内側の関数に結合するため、 math pow sin 3, 5 はエラーになります( sin に引数 3 と 5 を渡そうとするため)。迷った場合は、括弧を使用してください。
math は引数間の空白を無視し、入力を複数の引数として受け取ります(内部的にはスペースで結合されます)。そのため、 math 2 +2 と math "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_000 、 0x_89_AB_CD_EF 、 1.234_567_e89 と記述できます。
演算子¶
math は以下の演算子を認識します。
+加算
-減算
*、x乗算。
*はグロブ文字であるため、引用符で囲むかエスケープする必要があります。xは、後ろに空白を入れないと16進数表記の0xのように見えてしまうため注意が必要です。/除算
^べき乗
%剰余(余り)
(、)グループ化。
()はコマンド置換を意味するため、引用符で囲むかエスケープする必要があります。
これらはすべて中置記法で使用されます(例: + 5 2 ではなく 5 + 2 )。
定数¶
math は以下の定数を認識します。
eネイピア数(オイラー数)
pi円周率(π)。おなじみの定数です。Tau(タウ)の半分です。
tau2πに相当します。つまり円のラジアン数です。
先頭に $ を付けずに使用してください(例: pi - 3 は約 0 になります)。
関数¶
math は以下の関数をサポートしています。
abs絶対値(正の符号を伴う値)
acos逆余弦(アークコサイン)
asin逆正弦(アークサイン)
atan逆正接(アークタンジェント)
atan22つの変数に対する逆正接(アークタンジェント)
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双曲線余弦(ハイパボリックコサイン)
expeを底とする指数関数
fac階乗。
x!としても知られています(x * (x - 1) * (x - 2) * ... * 1)。floor床関数。数値を最も近い小さな整数に切り下げます。
lneを底とする自然対数
log、log1010を底とする常用対数。任意の底
bにおける対数を計算するには、log(x) / log(b)を使用してください。log22を底とする 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 / 6 は 1.666667 を出力します。
math -s0 10.0 / 6.0 は 1 を出力します。
math -s3 10 / 6 は 1.667 を出力します。
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 を表示します。これは「49 個の中から 6 個選ぶ」ロトの全組み合わせ数です。
math max 5,2,3,1 は 5 を表示します。
互換性に関する注意¶
fish 1.x および 2.x リリースでは、 math 式の処理を bc コマンドに依存していました。 fish 3.0.0 以降、fish は tinyexpr ライブラリを使用し、外部コマンドを介さずに式を評価します。
式がマイナス記号で始まる場合でも、式の前に -- を置く必要はありません(マイナス記号が無効なオプションとして解釈されることはありません)。もし式の前に -- を挿入した場合、他のコマンドと同様にオプションのスキャンがそこで停止し、その -- 自体は式の一部とはみなされません。
