Skip to content

Latest commit

 

History

History
75 lines (58 loc) · 1.77 KB

010-bc.md

File metadata and controls

75 lines (58 loc) · 1.77 KB

bc

bcは、任意精度算術言語だ。

実際のところ、bcは電卓だ。任意精度計算できる。

$ bc
1+1
2
1234*5678
7006652
2^100+3^100
515377520732011332304111729993850674198810727377

言語というだけあって変数も使える。

$ bc
x = 1
x
1
x+x
2

条件分岐、ループ、関数も揃っている。

$ bc
if ( 1 < 2 ) 1 else 0
1
for( i = 1 ; i != 10 ; ++i ) sum+=i
sum
45
define next(x) {
    return (x+1)
}
next(99)
100

実数を使う場合は変数scaleを設定する必要がある。

$ bc
10/3
3
scale=10
10/3
3.3333333333

scale変数をわざわざ設定したくない場合、引数-lをつけるとscaleが20になる。

$ bc -l
10/3
3.33333333333333333333
scale
20

文法はC言語風で馴染みやすい。

実はbcが書かれる前にdcというプログラムがあった。これはBell LabsのRobert MorrisによってBで書かれたプログラムで任意精度計算を逆ポーランド記法で行えるというものだった。dcはUNIXの歴史の中で最初期のプログラムだった。というのもBell LabsがPDP-11を入手したとき、このマシン用に書かれた最初のプログラムがdcだったからだ。

しかし一般人は中置記法で計算したかったので、dcのフロントエンドであるbcが書かれた。作者にはRobert Morrisも含まれている。

当時のbcの実装は、C言語風のbc言語をdc言語にコンパイルして結果をdcにパイプで流し込んでいたらしい。

POSIXによる規格化にあたってはbcのみが規格化された。1991年に独立したGNU bcが実装され、2003年にはOpenBSDが独立してbcを実装している。

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html