Operasi float dengan bc?

42

Sepertinya bc tidak mendukung operasi float, ketika saya lakukan echo 1/8 | bcitu membuat saya nol.

Saya memeriksa bc (1), tetapi bahkan tidak disebutkan float, jadi saya ingin tahu apakah ini didukung?

bunga aster
sumber
9
echo "scale=4; 1/8" | bc
LiuYan 刘 研
Pertanyaan ini dan khususnya jawaban yang diterima mungkin menarik bagi Anda.
Emanuel Berg

Jawaban:

56

bctidak melakukan floating point tetapi melakukan angka desimal presisi tetap. The -lbendera Hauke menyebutkan beban perpustakaan matematika untuk misalnya. fungsi trigonometri tetapi juga berarti

[...] skala standarnya adalah 20

scaleadalah salah satu dari sejumlah "variabel khusus" yang disebutkan dalam halaman manual. Anda dapat mengaturnya:

scale=4

Kapan saja Anda mau (apakah -ldigunakan atau tidak). Ini mengacu pada jumlah digit signifikan yang digunakan dalam desimal . Dengan kata lain, solusi berikutnya akan dibulatkan ke jumlah digit setelah skala desimal (== presisi tetap).

Skala standar sans -ladalah 0, yang berarti dibulatkan ke bilangan bulat.

goldilocks
sumber
27

halaman manual mengatakan:

Jika bc dipanggil dengan opsi-l, perpustakaan matematika dimuat [...]

Kelengkapan yang bisa ditingkatkan, memang ...

Hauke ​​Laging
sumber
14
Laporkan di hulu sebagai bug ...
vonbrand
0

1) Angka dalam bc memiliki skala. Skala angka tidak harus bingung dengan faktor skala. 'Skala' dunia yang sama digunakan sebagai fungsi untuk menanyakan skala angka atau sebagai parameter untuk mengatur faktor skala.

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

2) Faktor skala menentukan berapa banyak digit yang disimpan di sebelah kanan titik desimal ketika melakukan operasi. Jika s adalah faktor skala saat ini, sa adalah skala operan pertama a, sb adalah skala operan kedua b, hasilnya dipotong sebagai berikut:

    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) Pada awalnya bc adalah preprocessor dari dc. Sekarang, pada banyak sistem, bc adalah program mandiri.

Sumber: [ https://plan9.io/magic/man2html/1/dc]

cd9
sumber