我在 Ubuntu Linux 中使用 bc。它有一个预定义的常量 PI,设置为 99。为什么 bc 将 PI 定义为 99 而不是 3.14159...?
ste*_*ver 19
中没有内置常量 \xcf\x80 bc
。如果使用该-l
选项调用,一些内置函数将变得可用,允许您以三角函数方式计算 \xcf\x80 \xe2\x80\x93手册页包括以下示例:
\n\n\xe2\x80\x8a
例子
\n在 shell 中,以下代码会将 \xcf\x80 的值分配给 shell 变量
pi
。\nRun Code Online (Sandbox Code Playgroud)\n\npi=$(echo "scale=10; 4*a(1)" | bc -l)\n
当您尝试评估PI
输入基数转换的结果时发生的情况,如 GNU bc 的 texinfo 文档(此处为版本 1.07.1)中所述:
\n\n\xe2\x80\xa6\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83
\nbc
使用由变量指定的当前输入基数将常量转换为\n内部十进制数IBASE
。
注意到
\n\n\n\xe2\x80\xa6\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83对于多位数,将
\nbc
所有\n大于或等于IBASE
\n的输入数字更改为 \xe2\x88\x921 的值IBASE
。 \xc2\xa0 这使得该数字ZZZ
始终是输入基数的最大 3 位数字。
相应地,在默认情况下ibase=10
,任何一对非十进制数字的转换都会得到十进制的 99。
早期版本的 GNU 的bc
最大值ibase
为 16,并且只提供 [0-9A-F] 集合中的字符;在这种情况下,超出此范围的字符会导致错误情况。\xc2\xa0\n您可以在bc
\xc2\xa0Command\xc2\xa0Manual version\xc2\xa01.06 中看到此内容,\n其中也包含上述段落。
我不确定bc
内部有 Pi 数,但你总是可以用这种方式计算它:
4*a(1)
Run Code Online (Sandbox Code Playgroud)
函数a(x)
实际上是反正切的
小智 5
不,在 (any) 中没有定义为 99 的(数学)常量 PIbc
。
习惯上bc
是将大写字母解释为常量数值。(小写字母是变量名)。
即使在 POSIX 中,它也是一个长期存在的概念,A
表示 的十进制数值10
:
\n\n当 ibase 或 obase 被分配来自 bc 词汇约定列表中的单个数字值时,该值应假定为十六进制。(例如,ibase=A 设置为以 10 为基数,无论当前 ibase 值如何。)。
\n
这允许将输入基数重置为十进制 10,无论此时的基数如何,即:ibase=A
始终将 ibase 重置为10
。
根据bc
所使用的版本,后面的数字B
可能Z
被定义为具有某些特定值、无值或生成错误。
具体来说,对于 GNU bc 版本 1.07,单个大写字母的值最多为 35(无论设置了哪个 IBASE)。
\n$ echo $(bc <<<\'A;B;C;D;E;F;G;H;I;Z\')\n10 11 12 13 14 15 16 17 18 35\n
Run Code Online (Sandbox Code Playgroud)\n但对于双倍、三倍等大写数字,该值被限制为ibase-1
。
$ echo $(bc <<<\'AA;BB;GG;ZZ;AAA;ZZZ\')\n99 99 99 99 999 999\n\n$ echo $(bc <<<\'ibase=14;obase=ibase;AA;BB;GG;ZZ;AAA;ZZZ\')\nAA BB DD DD AAA DDD\n
Run Code Online (Sandbox Code Playgroud)\n数学常数pi(或其常用符号\xcf\x80 )的值可以通过以下方式计算:
\n$ bc -l <<<\'scale=40; 4*a(1)\'\n3.1415926535897932384626433832795028841968\n
Run Code Online (Sandbox Code Playgroud)\n或者,设置一个变量:
\nbc -l <<<\'scale=40; pi=4*a(1); pi\'\n3.1415926535897932384626433832795028841968\n
Run Code Online (Sandbox Code Playgroud)\n