Bcはfloat演算をサポートしていないようです。_echo 1/8 | bc
_を実行すると、ゼロが取得されます。
私はbc (1)
をチェックしましたが、float
についてさえ言及していないので、サポートされているのでしょうか?
bc
は浮動小数点を実行しませんが、固定精度の10進数を実行します。 Haukeが言及する-l
フラグは、たとえば、数学ライブラリをロードします。関数をトリガーしますが、それはまた意味します
[...]デフォルトscaleは20です
scale
は、manページに記載されている「特殊変数」の1つです。あなたはそれを設定することができます:
scale=4
いつでも(-l
を使用したかどうかにかかわらず)。 10進数で使用される有効桁数を指します。つまり、後続のソリューションは、小数点以下の桁数に丸められます(==固定精度)。
デフォルトのスケールsans -l
は0で、整数に丸められます。
マニュアルページは言う:
-lオプションを指定してbcを呼び出すと、数学ライブラリがプリロードされます[...]
それの理解可能性は確かに改善される可能性があります...
私がする時
echo 1/8 | bc
ゼロになります。
はい、デフォルトでは、スケールの値(小数点以下の桁数)はゼロ(0)です。その場合、bc
は任意の精度の計算を実行しますが、ドットの後に数値はありません。
$ echo 234^34 | bc
35755195084527581333820034812187200823956346053610939764649481375776\
5274080116736
つまり、整数の任意精度演算です。
変数scale
の値を変更することにより、小数点以下の桁数を変更できます。
$ echo 'scale=3; 1/8' | bc
.125
$ echo 'scale=27; 1/8' | bc
.125000000000000000000000000
Bcはfloat演算をサポートしていないようです
いいえ、bcには浮動小数点の概念がありません( IEEE-754で定義されているように 少なくとも)。
Bcが行うのは、10進分数(小数点以下の桁数が有限)の任意精度の計算です。
小数点記号の後の桁数は、変数scale
によって設定されます。
$ echo 'scale=5; sqrt(2)' | bc
1.41421
$ echo 'scale=35; sqrt(2)' | bc
1.41421356237309504880168872420969807
関数sqrt
は基本であり、デフォルトのbc
の一部です。
他のいくつかの関数(log、sen、cos、atanなど)はbc -l
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x) The Bessel function of integer order n of x.
また、スケールを20に設定します(開始後に変更できます)。
そう:
$ echo '1/8' | /bin/bc -l
.12500000000000000000
1)bcの数値にはスケールがあります。数値のスケールとスケール係数を混同しないでください。同じ世界の「スケール」は、数値のスケールを照会する関数として、またはスケール係数を設定するパラメーターとして使用されます。
echo "scale=scale(1.1);11/10" | bc will return 1.1
2)スケール係数は、操作を行うときに小数点の右側に何桁を保持するかを決定します。 sが現在のスケールファクター、saが最初のオペランドaのスケール、sbが2番目のオペランドbのスケールである場合、結果は次のように切り捨てられます。
scale of result
a+b max(sa,sb)
a-b max(sa,sb)
a*b min(sa+sb , max(s,sa,sb))
a/b s
a%b so that a = b*quotient + remainder; remainder has sign of a
a^b min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)
3)元々、bcはdcのプリプロセッサでした。現在、多くのシステムでは、bcはスタンドアロンプログラムです。