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作為高精度計算程式,足夠簡單,也足夠強大。缺點是對於沒有學過程式語言的人來說,難於使用。