Linux bcはPIを99として定義します。

Linux bcはPIを99として定義します。

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すべての入力数字を次の値以上に変更します。IBASEIBASE-1.これにより、数字はZZZ常に入力ベースで最大3桁の数字になります。

したがって、デフォルトでは、ibase=1010進数ではなく数値ペアを変換すると、10進数99になります。

以前のバージョンのGNUにはbc最大ibase16個があり、[0-9A-F]セットの文字のみが提供されました。この場合、この範囲外の文字はエラー条件を引き起こします。あなたはこれを見ることができますbc コマンドマニュアルバージョン1.06には上記の段落も含まれています。

答え2

bc内部的にPi番号があるかどうかはわかりませんが、常に次のように計算できます。

4*a(1)

その機能a(x)は実際にアクタンジェント

答え3

いいえ、ありません(数学)定数 PI は 99 と定義されます。いずれにせよ)bc

bc大文字を定数値として解釈するのが一般的です。 (小文字は変数名です。)

これはPOSIXでも長く続いてきた概念です。A10進値を表します。10:

ibase または obase に bc 語彙規則リストの単一の数値が割り当てられている場合、その値は 16 進数であると仮定する必要があります。 (例えば、basese = Aは現在のbase値に関係なくデフォルト10に設定されます。)

これにより、そのポイントの進数に関係なく、入力進数を10進数10にリセットできます。つまり、ibase=Aibase は常に にリセットされます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

関連情報