lcalc

提供: Personal Tukubai for Academic
2021年6月7日 (月) 08:37時点におけるPt4a editor (トーク | 投稿記録)による版 (Batch Update)
ナビゲーションに移動 検索に移動

名前

lcalc : 高精度10進演算(整数18桁+小数18桁)を行う。

書式

使い方とオプション

Usage

lcalc <script> <files>...

Option

--divzero[=<string>]
--overflow[=<string>]
--outdomain[=<string>]
-d

説明

引数のファイル又は標準入力のテキストデータの各フィールドに対して、<script> にしたがった演算を行います。<script> では、式、フィールド、フィールド範囲を単独またはカンマ(,)で区切って複数指定することができます。

式の演算は、整数18桁+小数18桁 の36桁で行われます。式では、定数、NF(入力フィールド数)、NR(入力レコード数)、組込関数(round() age() sage() ceil() floor() sqrt())、単項演算(- ! $)、二項演算(+ - * / % **)、比較(< <= > >= == !=)、論理 AND(&&)、論理 OR(||)、条件演算(? :)、括弧を使うことができます。冪乗演算子 ** の代わりに ^ を使うことができます。

$ 演算子は入力のフィールドを表します。オペランドは整数に切り捨てられます。切り捨てられた結果が 1 〜 NF の範囲になければなりません。

丸め関数は、round() 四捨五入、age() 切り上げ、sage() 切り捨て を行います。第1引数の値を、第2引数で指定される桁位置で丸めます。第2引数は整数定数のみが許されます。第2引数が 0 で始まる場合は整数部分の桁位置を、0 以外で始まる場合は小数部分の桁位置を示します。例えば、sage(123.456, 01) は 120.000になり、sage(123.456, 1) は 123.400 になります。

天井関数 ceil()、床関数 floor() は、それぞれ引数を下回らない最小の整数、引数を上回らない最大の整数を求める関数です。

平方根関数 sqrt() は、平方根を求める関数です。

式の出力形式は 整数部.小数部 です。整数部は必要な桁数(1〜18)、小数部は常に18桁です。ただし、演算結果が整数になる場合は、小数点及び小数部は表示されません。

論理 AND は、左辺が 0 の場合は結果が 0 になります。左辺が 0 以外の場合は右辺の値が結果になります。論理 OR は、左辺が 0 以外の場合はその値が結果になります。左辺が 0 の場合は右辺の値が結果になります。

フィールドは、「$ 式」の形式で、入力のフィールドそのままの文字列を表します。式の値は整数に切り捨てられます。切り捨てられた結果が 0 〜 NF の範囲になければなまりせん。0 の場合は入力行全体となります。$ 演算子との違いは、数値に変換されるか、文字列のままかです。例えば、スクリプトが ‘$1, ($2)’ で、 入力が

123.456 123.456

の場合、出力は

123.456 123.456000000000000000

となります。

フィールド範囲は、$[式1:式2] の形式で、式1 〜 式2 の連続した入力フィールドを表します。式1 > 式2 の場合、逆順に表示されます。式1、式2 ともに整数に切り捨てた値が 1 〜 NF の範囲になければなりません。

スクリプトの構成要素間には任意個の空白類(改行文字を含む)を置くことができます。

  1. から行末まではコメントになります。コメントは空白を置ける場所に置くことができます。

除算、剰余算において、右オペランドが 0 の場合は、演算結果が 0 になります。–divzero オプションを指定した場合は、その演算を含む式の計算が放棄され、オプションで指定された文字列が出力されます。文字列の指定を省略した場合は div/0 が出力されます。

式の計算でオーバーフローが発生した場合は、lcalc の実行が中止されます。–overflow オプションを指定した場合は、その式の計算が放棄され、オプションで指定された文字列が出力されて、lcalc の実行が継続されます。文字列の指定を省略した場合は ovflw が出力されます。

平方根関数の引数や冪乗演算の被演算子が不当な値の場合、lcalc の実行が中止されます。–outdomain オプションを指定した場合は、その式の計算が放棄され、オプションで指定された文字列が出力されて、lcalc の実行が継続されます。文列の指定を省略した場合は outdm が出力されます。

-d オプションを指定すると、ファイルを読み込まず、スクリプトを直接実行します。この場合、$演算子、フィールド、フィールド範囲は使えません。

例(その1)

通常の使い方

$ cat data
01 埼玉県 91 59 20 76 54.1
01 埼玉県 46 39 8 5 21.2
01 埼玉県 82 0 23 84 10.3
02 東京都 30 50 71 36 30.4
02 東京都 58 71 20 10 6.5
04 神奈川県 92 56 83 96 75.6

$ lcalc '$1, $2, $3 / $4 + $5 * $6' data
01 埼玉県 1521.542372881355932203
01 埼玉県 41.179487179487179487
01 埼玉県 1932
02 東京都 2556.600000000000000000
02 東京都 200.816901408450704225
04 神奈川県 7969.642857142857142857

第1、2フィールドは指定全体が「$ 式」の形式なので、文字列としてそのまま出力されます。第3フィールドは式として計算が行われます。

例(その2)

電卓的な使い方

$ lcalc -d '1.23 * 3.45 / 3'
1.414500000000000000

Version and Edition

Version : Wed Jan 13 10:24:18 JST 2021

Edition : 1


© 2021 Universal Shell Programming Laboratory site