はじめに

こんにちは!今回はbcコマンドについて解説します。

bcは、任意精度の計算(big number 計算)ができるコマンドです。シェルの組み込み計算では対応できない、小数点が多い計算や高精度が必要な計算に活躍します。

数値計算が必要な時には、めっちゃ便利ですよ。

bcコマンドとは

bcは、任意精度の言語による計算と処理を行う外部コマンドです。

主な特徴:

  1. 高精度計算 - 小数点以下の桁数を自由に設定
  2. 大きな数値対応 - シェルの計算限界を超える
  3. 関数サポート - sin、cos、sqrt(平方根)など
  4. ループ・条件判定 - 簡単なプログラミング可能
  5. 進数変換 - 2進数、16進数などの変換

電卓よりはるかに高機能で、複雑な計算を簡単に実行できます。

基本構文

1
echo "計算式" | bc [オプション]

または、対話モードで実行:

1
bc [オプション]

主なオプション

オプション 説明
-l 数学ライブラリを読み込む(sinなど)
-w 警告を表示
-q 起動メッセージを表示しない
-v バージョンを表示

使用例

例1: 基本的な計算

1
echo "2 + 3" | bc

実行結果:

1
5

シンプルな足し算。

例2: 小数計算

1
echo "10 / 3" | bc

実行結果:

1
3

デフォルトは整数計算。

例3: 小数点以下の精度指定

1
echo "scale=2; 10 / 3" | bc

実行結果:

1
3.33

scaleで小数点以下の桁数を指定。

例4: より高精度の計算

1
echo "scale=10; 22 / 7" | bc

実行結果:

1
3.1428571428

小数点以下10桁で計算。

例5: 複数の計算

1
echo "2 + 3; 4 * 5; 10 - 6" | bc

実行結果:

1
2
3
5
20
4

複数の式を;で区切って実行。

例6: 括弧と優先度

1
echo "(2 + 3) * 4" | bc

実行結果:

1
20

括弧で計算順序を指定。

例7: べき乗計算

1
echo "2 ^ 10" | bc

実行結果:

1
1024

^でべき乗。

例8: 平方根(数学ライブラリ利用)

1
echo "scale=5; sqrt(2)" | bc -l

実行結果:

1
1.41421

-lオプションで数学関数を使用。

例9: 三角関数

1
echo "scale=5; s(1)" | bc -l

実行結果:

1
.84147

s()sin()c()cos()

例10: 自然対数(ln)

1
echo "scale=5; l(10)" | bc -l

実行結果:

1
2.30258

l()は自然対数。

Tips・注意点

scaleで全体の精度管理

1
echo "scale=3; 1/3 + 1/3 + 1/3" | bc

scaleを設定すると、その後のすべての計算に適用されます。

16進数への変換

1
echo "obase=16; 255" | bc

obase(output base)で出力進数を指定。

2進数への変換

1
echo "obase=2; 10" | bc

obase=2で2進数に変換。

実践的な使い方

割合の計算

1
echo "scale=2; 150 / 300 * 100" | bc

割合(パーセンテージ)の計算。

ファイルサイズの計算

1
echo "scale=2; 1024 * 1024 * 1024 / (1024 ^ 3)" | bc

GBやMBなどの単位換算。

シェルスクリプト内での計算

1
2
3
4
5
#!/bin/bash
num1=10
num2=3
result=$(echo "scale=2; $num1 / $num2" | bc)
echo "結果: $result"

スクリプト内で高精度計算。

複利計算

1
echo "scale=2; 1000 * (1.05 ^ 10)" | bc

複利計算(1000円を年利5%で10年)。

税抜き金額の計算

1
echo "scale=2; 11000 / 1.1" | bc

税抜き金額を計算(税率10%の場合)。

まとめ

bcコマンドのポイント:

  • 任意精度の計算ができるコマンド
  • 基本: echo "式" | bc
  • 精度指定: scale=Nで小数点以下N桁
  • 数学関数: -lオプションでsqrtsinなどが使用可能
  • 進数変換: obaseで出力進数を指定
  • よく使う組み合わせ: echo "scale=2; 10 / 3" | bc

シェルスクリプトで高精度な数値計算が必要な時に最強のコマンドですよ!