Linux bc定义PI为99

Linux bc定义PI为99

我在 Ubuntu Linux 中使用 bc。它有一个预定义的常量 PI,设置为 99。为什么 bc 将 PI 定义为 99 而不是 3.14159...?

答案1

中没有内置常数 π bc。如果使用-l选项调用,一些内置的功能变得可用,让您可以用三角函数计算 π –手册页包括这个例子:

例子

    在 shell 中,以下代码将把 π 的值赋给 shell 变量pi

    pi=$(echo "scale=10; 4*a(1)" | bc -l)
    

当您尝试评估PI输入基数转换的结果时发生的情况,如 GNU bc 的 texinfo 文档(此处为版本 1.07.1)中所述:

...   bc使用由变量指定的当前输入基数将常量转换为内部十进制数IBASE

注意到

…对于多位数字,bc将所有输入数字更改为大于或等于IBASE 的值IBASE−1。这使得该数字ZZZ始终是输入基数中最大的 3 位数字。

相应地,在默认情况下ibase=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 中,这也是一个长期存在的概念:A表示十进制数值10

当 ibase 或 obase 被分配来自 bc 词汇约定列表中的单个数字值时,该值应假定为十六进制。 (例如,ibase=A 设置为以 10 为基数,无论当前 ibase 值如何。)。

这允许将输入基数重置为十进制 10,无论此时的基数如何,即:ibase=A始终将 ibase 重置为10

根据所bc使用的版本,后面的数字B可能Z被定义为具有某些特定值、无值或生成错误。

具体来说,对于 GNU bc 版本 1.07,a 的值单身的大写字母最多为 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

数学常数的值圆周率(或其通常的符号π) 可以用以下公式计算:

$ bc -l <<<'scale=40; 4*a(1)'
3.1415926535897932384626433832795028841968

或者,设置一个变量:

bc -l <<<'scale=40; pi=4*a(1); pi'
3.1415926535897932384626433832795028841968

相关内容