今回も前回に続いてbcコマンドです。前回はbcコマンドで簡単な計算を行いました。bcは簡単な計算だけでなくプログラム的な処理も行うことができます。実質プログラミング言語と比較しても遜色ないのでは?という感じもあります。
また、今回はPowerShellでの計算方法も説明します。ここでのPowerShellコマンドはWindows/macOS/UNIX用のいずれでも動作します。
PowerShellはとても簡単に計算できる
PowerShellの場合、そのまま数式を入力するだけです。とても簡単です。というより、これ以上簡単にはできないでしょう。
1+2*3
コマンドが冗長だったり面倒そうな感じもあるPowerShellですが、こと電卓計算に関しては素晴らしいと言えます。これぞ計算の得意なコンピューターといった感じです。
もちろん括弧を使った計算もできます。
(1+2)*3
簡単な計算だけでなく、より高度な計算もできます。例えば以下のようにコマンドを入力すると2の平方根が表示されます。ちなみにWindows PowerShell以外のmacOSのPowerShellなどでも問題なく計算されます。(bcの場合はsqrt()で計算できます)
[Math]::Sqrt(2)
べき乗を求めるならPow()が用意されています。以下のようにすると2の8乗の値である256が表示されます。
[Math]::Pow(2,8)
他にどのような計算ができるかは以下のマイクロソフト社のページを参照してください。
・Mathクラス
https://learn.microsoft.com/ja-jp/dotnet/api/system.math?view=net-7.0
bcで16進数計算する
プログラミングで欠かせないのが16進数による計算です。計算は10進数でも結果を16進数で表示したい場合や、その逆も可能です。
まず、計算結果を16進数で出力するようにしましょう。コマンドラインでbcと入力します。起動したらobase=16と入力します。
obase=16
このように入力したら2+11と入力してみましょう。計算結果が16進数で表示されます。2+11は16進数ではDなので期待通りの結果になっています。
元に戻すにはobase=10と入力します。入力後に2+11と入力すると13と表示されます。
obaseはn進数で出力する値を指定しますので、結果を2進数で出力したい場合はobase=2のように指定します。
ここまではn進数で出力する場合でしたが、逆に入力をn進数にすることもできます。この場合はibaseを使います。16進数で計算した結果を10進数で出力する場合は以下のように指定します。
obase=10
ibase=16
ここでFF-10という16進数同士の計算をしてみましょう。以下のように入力すると16進数での計算結果が表示されます。
ibase=2とすれば2進数同士の計算もできます。以下のように入力すると2進数同士の計算が行われ結果が16進数で表示されます。
bcの機能
bcの機能を知るにはmanコマンドを使えば表示されます。man bcと入力し下の方へ読んでいくと、このコマンドが予想以上に高機能であることがわかります。とは言っても簡単な計算がメインであれば、bcの高機能な部分は使うことはほとんどないでしょう。
man bc
それではbcで三角関数の計算をしてみましょう。ここらへんはプログラマブル電卓というより関数電卓の範疇でしょう。ただし、bcコマンドで何も指定せずに三角関数の計算をしようとするとエラーになります。
三角関数の計算を行うにはbcコマンドでl(エル)オプションまたは--mathlibを指定する必要があります。Windowsのbcの場合は.¥bc.exe -lのようにオプションを指定します。なお、フォントによっては円記号は半角バックスラッシュで表示されます。以下の例はPowerShellからbc.exeを起動していますが、コマンドラインから起動する場合も同様です。なお、bc.exeのアイコンをダブルクリックして起動した場合は-lオプションなしの状態になります。
Windowsで-lオプションを付加した状態でbcを起動したい場合は以下のようにショートカットを作成しリンク先の欄の末尾に -lと入力します。あとは作成したbc.exeのショートカットから起動すればOKです。
三角関数の正弦(サイン/sin)はs()なので以下のようにすると計算結果が表示されます。()内には数値を指定しますが、この数値はラジアンになります。
s(1)
三角関数は他にも余弦(コサイン・cos)、逆正接(アークタンジェント・arctan)が用意されています。
・コサイン
c(1)
・アークタンジェント
a(0.5)
三角関数以外ではl()の自然対数、e()の指数関数、j()のベッセル関数が用意されています。
関数を定義して使う
bcはプログラミング言語並みに高機能なので関数を定義したりループ/繰り返し処理を行うことができます。ここでは消費税の計算を行ってみましょう。これは単純に値に10%を乗算するだけです。このくらいなら関数を定義する必要もありませんが、現在の日本では消費税は8%と10%です。これら異なる税率にも対応させるために関数を定義してみましょう。
bcで関数を定義するにはdefineの後に関数名とパラメーターを書きます。その後にブロック{}内に計算式や条件判断などの処理を書きます。
消費税10%の場合を計算する関数taxは以下のように定義できます。
define tax(price){
return (price*1.1)
}
それでは実際に定義した関数を使って計算してみましょう。定義した関数を使うには関数名(パラメーター)のように指定します。以下のようにすると100円に10%の消費税を加えた金額が表示されます。