shellで浮動小数点の計算をする方法

calculator-385506_1280
LINEで送る
Share on GREE
Share on LinkedIn

shellで普通に計算すると、どうしても整数で返ってくるため、少数値を扱うのに困ってしまいます。
ただ、浮動小数点を扱えない訳ではなく、特定のお作法を通してやる必要があるという事なんですね。
そこで、まあまあ簡単に少数値の計算を行える方法をご紹介します。

bcコマンドを使う

exprコマンドは整数専用なので、上記のように怒られてしまいます。

小数点も扱えるbcコマンドというのがあり、数値計算を行うコマンドです。
あまり使われることはないのですが、計算式において、色々と便利な機能を持っているので
使い慣れておくとかなり得することが多いでしょう。

小技

計算結果が1より少ない少数値の場合、.(ピリオド)の前が省略されるようです。

数値としては、整数の箇所にも0を付けたい場合は、awkを用いて以下のようにすることで対応可能になります。

あれ?最初からawkでやればいいんでないか?
試しにやってみる

演算子を含めて処理できるbcもいいが、数字を直接操作できるawkも魅力ですね。
しかも、整数の0までしっかりついてるし・・・orz

速度比較

エンジニアとして少し気になったので、bcとawkの速度比較を行なってみました。

bc.sh

awk.sh

kakko.sh

解説

0〜10000までの数値を累計で足し込んでいく式をbc版とawk版で書いてみました。
それでは、実行!

実行結果

$ sh kakko.sh
50005000
real 0m0.077s
user 0m0.069s
sys 0m0.008s

0〜1000の値に変更して再度実行

まとめ

ほんのチョビっとだけbcコマンドの方が早いようですね。
しかし、驚愕なのは二重括弧のスピード!
桁が2つ近くも違う。
確かにawkやbcと違って、他のモジュールを読み込んでいないのでネイティブ動作だけだからでしょう。
ちなみに、exprを使うのがセオリーのようですが、awkやbcと同じでしょうね。

One comment

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*