web-dev-qa-db-ja.com

bashは外部コマンドを使用せずに浮動小数点演算を実行できますか?

bashは、外部コマンドを使用せずに整数演算を実行できることを確認しました。次に例を示します。

echo "$((3 * (2 + 1)))"

bashは、外部コマンドを使用せずに浮動小数点演算も実行できますか?

8
user267288

番号。

Bashは浮動小数点演算をネイティブに実行できません。


これはあなたが探しているものではありませんが、他の誰かを助けるかもしれません:

代替

  1. bc

bcは浮動小数点演算を可能にし、scale値を設定することで整数を浮動小数点に変換することもできます。 (scale値はbc内の除算にのみ影響しますが、これの回避策は1で除算した数式を終了することです)

$ echo '10.1 / 1.1' | bc -l
9.18181818181818181818
$ echo '55 * 0.111111' | bc -l
6.111105
$ echo 'scale=4; 1 + 1' | bc -l
2
$ echo 'scale=4; 1 + 1 / 1' | bc -l
2.0000

  1. awk

awkはそれ自体がプログラミング言語ですが、bashスクリプトで浮動小数点演算を実行するために簡単に利用できますが、それだけではありません!

echo | awk '{print 10.1 / 1.1}'
9.18182
$ awk 'BEGIN{print 55 * 0.111111}'
6.11111
$ echo | awk '{print log(100)}'
4.60517
$ awk 'BEGIN{print sqrt(100)}'
10

echoにパイプされたawkBEGINの両方を使用して、これを行う2つの方法を示しました。 awkBEGINステートメント内のすべては、入力が読み取られる前に実行されますが、入力またはBEGINステートメントがない場合、awkは実行されないため、入力をフィードする必要があります。


  1. Perl

Bashスクリプト内で利用できる別のプログラミング言語。

$ Perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(Perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Python

Bashスクリプト内で利用できる別のプログラミング言語。

$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Ruby

Bashスクリプト内で利用できる別のプログラミング言語。

$ Ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(Ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
18
jesse_b

「bashは外部コマンドを使用せずに浮動小数点演算も実行できますか?」

いいえ。

robert@pip2:/tmp$ echo $((2.5 * 3))
bash: 2.5 * 3: syntax error: invalid arithmetic operator (error token is ".5 * 3")
2
mrflash818