标签:
bc:
????bc 是一种高精度的可交互执行的计算机语言。它在一些浮点数的运算中应用广泛。
?
一般情况下我们直接输入 bc ,便可进入其工作环境。当然,它还有其他的参数
-h | 显示帮助信息并退出 |
-i | 强制进入交互模式 |
-l | 定义了标准的数学库 |
-w | 使用扩展时给出警告 |
-s | 使用标准语言 |
-q | 不打印欢迎信息 |
-v | 打印版本信息并退出 |
?
在bc中大多数的元素是数字,他们都有两种属性:长度与精度(小数点位数)
bc有4中特殊的变量
scale | 精度(小数点之后的位数) |
ibase | 输入进制数 |
obase | 输出进制数 |
last | 存储上个指令输出的结果 |
?
注释: /*……*/ 或者 #
?
支持的变量(var)与表达式(expr)
++/-- var | 先加(减)后取值 |
var ++/-- | 先取值后加减 |
-expr | 取反 |
expr+/-/*///%/^expr | 加减乘除求余乘方 |
(expr) | 布尔值 |
var=expr | ? |
var<op>= expr | var=var<op>expr |
expr1 </<=/>/>=/==/!=/expr2 | 判断语句 |
!expr | 取反 |
expr &&/|| expr | 逻辑运算 |
length( expression ) | 计算长度 |
read() | 读取输入 |
scale( expression ) | 精确度? |
sqrt( expression ) | 平方根 |
?
可调用的语句
print " ** " | 打印 |
{ 语句集合 } | ? |
if (expression ) ** [else **] | 条件判断 |
while( expression ) ** | 循环 |
for([ exp1] ;[exp2] ; [exp3]) ** | 循环 |
break | 可跳出循环 |
continue | 进行下次循环 |
halt | 退出bc |
return | 函数返回 |
?
其他
limits | 显示limits |
quit | 退出 |
warranty | 显示bc相关信息 |
?
函数定义方法
define name ( parameters ) { newline
auto_list statement_list } 这个部分请看实例2或者man帮助来进一步了解。
关于数组 name[]
数学库函数
s(x) | sin(x) x是弧度 |
c(x) | cos(x) |
a(x) | arctan(x) |
l(x) | ln(x) |
e(x) | ex |
j(n,x) | 贝塞尔函数的整数n x。 |
?
实例1
计算圆周率
[linux@linux ~]$ pi=$(echo "scale=10; 4*a(1)" | bc -l) [linux@linux ~]$ echo $pi 3.1415926532 |
?
实例2
?
scale = 20 /* Uses the fact that e^x = (e^(x/2))^2 When x is small enough, we use the series: e^x = 1 + x + x^2/2! + x^3/3! + ... */ ? define e(x) { auto a, d, e, f, i, m, v, z /* Check the sign of x. */ if (x<0) { m = 1 x = -x } /* Precondition x. */ z = scale; scale = 4 + z + .44*x; while (x > 1) { f += 1; x /= 2; } ? /* Initialize the variables. */ v = 1+x a = x d = 1 ? for (i=2; 1; i++) { e = (a *= x) / (d *= i) if (e == 0) { if (f>0) while (f--) v = v*v; scale = z if (m) return (1/v); return (v/1); } v += e } } |
?
实例3
创建test.bc
scale=2 print "\nCheck book program!\n" print " Remember, deposits are negative transactions.\n" print " Exit by a 0 transaction.\n\n" ? print "Initial balance? "; bal = read() bal /= 1 print "\n" while (1) { "current balance = "; bal "transaction? "; trans = read() if (trans == 0) break; bal -= trans bal /= 1 } quit |
[linux@linux ~]$ bc -q test.bc ? Check book program! Remember, deposits are negative transactions. Exit by a 0 transaction. ? Initial balance? 3 ? current balance = 3.00 transaction? 5 current balance = -2.00 transaction? 0 [linux@linux ~]$ |
?
通常在Bash脚本中使用bc的范例格式为:
variable=$(echo "OPTIONS; OPERATIONS" | bc [options]) 即:echo "[选项];操作" | bc [选项]
可参考实例1
[linux@linux ~]$ echo "obase=8; ibase=16; 11+a"|bc 21 |
下面这个实例可参考下书写格式
使用bc命令的脚本片段 |
?
bc命令就介绍到这了,如果朋友有更好的实例,希望能多多分享。
?
标签:
原文地址:http://www.cnblogs.com/woxinyijiu/p/4543984.html