BCでフロート操作?


42

bcはfloat操作をサポートしていないようecho 1/8 | bcですが、それを行うとゼロになります。

私はチェックbc (1)しましたが、それも言及していないfloatので、サポートされているのでしょうか?


9
echo "scale=4; 1/8" | bc
LiuYan刘研

この質問、特に受け入れられている答えはあなたにとって興味深いかもしれません。
エマニュエルベルク

回答:


56

bc浮動小数点を行いませんが、固定精度の10進数を行います。-lフラグHaukeは、負荷などのための数学ライブラリに言及しています。関数をトリガーしますが、それも意味します

[...]デフォルトのスケールは20です

scalemanページに記載されている「特別な変数」の1つです。設定できます:

scale=4

いつでも(-l使用されたかどうかに関係なく)。それは小数で使用される有効数字の数を示します。つまり、後続のソリューションは、小数点以下桁数(==固定精度)の後にその桁数に丸められます。

デフォルトのスケールsans -lは0であり、整数に丸められます。


27

マニュアルページは言う:

bcが-lオプションで呼び出された場合、数学ライブラリがプリロードされます[...]

それのわかりやすさは、実際に改善される可能性があります...


14
バグとしてアップストリームで報告してください...
フォンブランド

0

1)bcの数字にはスケールがあります。数値のスケールをスケール係数と混同しないでください。同じ世界の「スケール」は、数値のスケールを照会する関数として、またはスケール係数を設定するパラメーターとして使用されます。

echo "scale=scale(1.1);11/10" | bc will return 1.1

2)スケール係数は、操作を行うときに小数点の右側に保持される桁数を決定します。sが現在のスケール係数、saが第1オペランド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はスタンドアロンプ​​ログラムです。

ソース:[ https://plan9.io/magic/man2html/1/dc]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.