我在 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
最大值为ibase
16,并且只提供 [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