来自GNU的高精度计算器bc

bc是一个源自GNU的高精度计算程序,除了进行简单的数值计算,更可以用它特有的语言去写一个计算程序,来执行复杂的计算,比如复杂的级数求和。大多数Linux发行版中都自带了bc,Windows的用户可以在GnuWin32项目中找到。

在命令行下执行bc,你就进入了bc的解释器,要退出,可以输入halt或者是quit,这两者有些细小的差别,过后再说。

bc下可以进行简单的计算。你可以输入34*23,3^4等等,其中“^”代表乘方。既然bc是个高精度的计算器,你当然可以输入34^99这样的表达式,bc会把结果一字不差地告诉你。等等,如果你输入的是3/5,你会发现bc计算的结果是0,难道是出错了?

这要说到bc的一个特性。在默认的情况下,bc计算结果的小数位数是零。也就是说,如果计算结果是小数,bc会把小数部分舍去。你当然可以改变这个特性,方法是输入:
scale=10
然后你再让bc计算3/5,你会发现结果变成了
.6000000000
保留了10位小数。

scale是bc中的一个特殊的变量,默认情况下,scale=0,因此是忽略小数位的。你可以把scale设置成任意的正整数,只要它不超过2147483647就行。

在bc中还可以使用变量。bc中的变量名以一个小写字母开头,后面可以跟数字或小写字母、下划线,但不能含有大写字母。例如执行下面的语句:
a=3
b=2
c=5
a*(b+c)
bc会把结果21显示出来。

下面再试试这个:
obase=2
接着再执行一些计算,比如:3+9。bc居然显示出了1100!怎么回事?
如果你熟悉二制,你会发现二进制的1100等于二进制里的12。没错,obase也是bc中的一个特殊变量,它可以设定计算结果以那一种进制显示。obase的取值范围是2~16。通过给obase设定不同的值,我们轻而易举地可以把十进制数转换成任意进制的数。

你也许还不满足,能不能在输入的不使用十进制呢?可以的,你应该设定ibase这个变量。例如:
ibase=2
obase=2
1101+10011
bc显示的结果就成了100000。这样,通过改变ibase和obase的值,你就可以进行任意进制的计算。

bc还支持一种语言,这种语言和C语言类似,因此使用起来很容易。请在一个文件中写下如下的代码:
define is_prime(n){
 auto prime,i;
 prime=1;
 for (i=2;i^2<=n;++i){
  if (n%i==0){
   prime=0;
   break;
  }
 }
 return prime;
}
print "/nPlease enter a positive integer n:/n";
n=read();
print "/n/n"
for (i=2;i<=n;++i){
 if (is_prime(i)){
  print i;
  print "/n";
 }
}
quit;
假设你将其保存为t.b,那么就可以在命令行中运行:
bc -q t.b
然后按提示输入一个正整数,你就会得到一串的质数。其中参数-q的意思是bc启动时不显示版权信息。

代码的第一行定义了一个函数名,这个函数有一个参数n。下面的auto prime,i定义了两个局部变量。后面一句n=read()作用是从键盘读入一个整数。其余的和C语言极其类似,就不解释了。

总结:bc作为高精度计算程序,足够简单,也足够强大。缺点是对于没有学过程序语言的人来说,难于使用。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值