Ubuntu Linuxではbcを使用しています。これには、99に設定された事前定義された定数PIがあります。 bcがPIを3.14159ではなく99として定義するのはなぜですか?
答え1
には組み込み定数πはありませんbc
。オプションで呼び出されると、-l
一部の組み込み機能三角関数を使用してπを計算できます。マニュアルページ次の例を含めてください。
はい
シェルでは、次のコードはπ値をシェル変数に割り当てます
pi
。pi=$(echo "scale=10; 4*a(1)" | bc -l)
GNU bcのtexinfoドキュメント(ここではバージョン1.07.1)で説明されているように、入力進数変換の結果を評価しようとするPI
とどうなりますか?
...
bc
変数で指定された現在の入力基数を使用して定数を内部 10 進数に変換します。IBASE
。
気づく
...複数桁の数字の場合、
bc
すべての入力数字を次の値以上に変更します。IBASE
値IBASE
-1.これにより、数字はZZZ
常に入力ベースで最大3桁の数字になります。
したがって、デフォルトでは、ibase=10
10進数ではなく数値ペアを変換すると、10進数99になります。
以前のバージョンのGNUにはbc
最大ibase
16個があり、[0-9A-F]セットの文字のみが提供されました。この場合、この範囲外の文字はエラー条件を引き起こします。あなたはこれを見ることができますbc
コマンドマニュアルバージョン1.06には上記の段落も含まれています。
答え2
bc
内部的にPi番号があるかどうかはわかりませんが、常に次のように計算できます。
4*a(1)
その機能a(x)
は実際にアクタンジェント
答え3
いいえ、ありません(数学)定数 PI は 99 と定義されます。いずれにせよ)bc
。
bc
大文字を定数値として解釈するのが一般的です。 (小文字は変数名です。)
これはPOSIXでも長く続いてきた概念です。A
10進値を表します。10
:
ibase または obase に bc 語彙規則リストの単一の数値が割り当てられている場合、その値は 16 進数であると仮定する必要があります。 (例えば、basese = Aは現在のbase値に関係なくデフォルト10に設定されます。)
これにより、そのポイントの進数に関係なく、入力進数を10進数10にリセットできます。つまり、ibase=A
ibase は常に にリセットされます10
。
bc
使用されるバージョンに応じて、次の数値は特定の値を持つか、値がないか、エラーを生成するように定義B
できます。Z
特にGNU bcバージョン1.07の場合一つ大文字は最大35文字まで可能です(IBASEを設定するかどうかにかかわらず)。
$ echo $(bc <<<'A;B;C;D;E;F;G;H;I;Z')
10 11 12 13 14 15 16 17 18 35
それ以外の場合ダブル、三回その他の大文字の場合、値はに制限されますibase-1
。
$ echo $(bc <<<'AA;BB;GG;ZZ;AAA;ZZZ')
99 99 99 99 999 999
$ echo $(bc <<<'ibase=14;obase=ibase;AA;BB;GG;ZZ;AAA;ZZZ')
AA BB DD DD AAA DDD
数学PI
数学定数の値PI(または一般的な表記法π)は、次の式を使用して計算できます。
$ bc -l <<<'scale=40; 4*a(1)'
3.1415926535897932384626433832795028841968
または変数を設定します。
bc -l <<<'scale=40; pi=4*a(1); pi'
3.1415926535897932384626433832795028841968