bcコマンドの使い方

べき乗計算をしたい時


※-lで数学ライブラリを使わなくても、整数乗の計算であればできる。

2の10乗

 # echo "2 ^ 10" | bc
 1024

10の2乗

 # echo "10 ^ 2" | bc
 100

小数点計算をしたい時(-lで数学ライブラリを使う)

 # echo "1 / 2" | bc
 0
 # echo "1 / 2" | bc -l
 .50000000000000000000
 # echo "scale=1;1 / 2" | bc -l
 .5
 #
 ※scale=で小数点の桁数を制御できる。

各時間の計算は以下の通り

※ミリ秒
# echo "10 ^ -3" | bc -l
.00100000000000000000

※マイクロ秒
# echo "10 ^ -6" | bc -l
.00000100000000000000

※ナノ秒
# echo "10 ^ -9" | bc -l
.00000000100000000000

※ピコ秒
# echo "10 ^ -12" | bc -l
.00000000000100000000
#

基数変換をしたい時



こりゃ便利!

※2進数→10進数
# echo "obase=10;ibase=2;11111" | bc
31
※10進数→2進数
# echo "obase=2;ibase=10;31" | bc
11111

だが、使い方は要注意!!ibaseとobaseの指定順番に意味があり。

例)
# echo "ibase=2;obase=10;11" | bc
11
# echo "obase=10;ibase=2;11" | bc
3
#

順番が違うだけど出力結果が異なる。。。。

bcのmanを見ると以下の妖しい記述があり。

ibase and obase define the conversion base for input and output numbers. The default for both input and output is base 10. last (an extension) is a variable that has the value of the last printed number.

ibaseとobaseは入力・出力値の変換方式を定義している。両方ともデフォルトは10。後に指定した表現の方がその後に記載される数字の変数(値)である?

上記の意味はおそらく、以下URLの情報に合致するものと思われる。


~上記URLより引用ここから~
ibase が入力値の基数で、obase が出力値の基数です。obase の値は直前の ibase で指定した基数で評価されますので、ibase は最後に指定するとよいです。
~上記URLより引用ここまで~

obase=の後の値まで、ibase=の値で評価されるとは。。。。そう考えると納得。

# echo "ibase=2;obase=10;11" | bc
11
→11を基数は2で評価する。(10進数では3)。obase=10だが、これは2進数表記の為、10進数では2。要は2進数で出力しろとの意味になる。

# echo "obase=10;ibase=2;11" | bc
3
→11を基数は2で評価する。(10進数では3)。obase=10の10は直前のibaseがない為、デフォルトの10進数で評価される為、要は10進数で出力しろとの意味になる。

以下の場合は、

# echo "ibase=16;obase=10;FF" | bc
FF
→FFを基数は16で評価する。(10進数では255)。obase=10だが、これは16進数表記の為、10進数では16。要は16進数で出力しろとの意味になる。

なんとも分かりづらい。よって、以下に留意することとする。
★必ず、obase=N,ibase=N,数値の順番で指定する。(obaseの前にibaseを置かない!!)




  • 最終更新:2015-01-11 18:28:04

このWIKIを編集するにはパスワード入力が必要です

認証パスワード