Jawaban:
dc
adalah alat yang sangat kuno dan agak lebih tua dari bc
. Mengutip halaman Wikipedia :
Ini adalah salah satu utilitas Unix tertua, bahkan sebelum penemuan bahasa pemrograman C; seperti utilitas lain dari vintage itu, ia memiliki serangkaian fitur yang kuat tetapi sintaks yang sangat singkat.
Sintaksnya adalah notasi polish terbalik, yang pada dasarnya berarti bahwa argumen (yaitu angka) datang pertama diikuti oleh operator. Contoh dasar dc
penggunaannya adalah:
echo '3 4 * p' | dc
Di mana p
diperlukan untuk mencetak hasil perhitungan. bc
di sisi lain menggunakan notasi infiks yang lebih akrab dan dengan demikian lebih intuitif untuk digunakan. Berikut ini adalah contoh bc
penggunaan:
echo '3 * 4' | bc
bc
distandarisasi oleh POSIX dan mungkin lebih portabel dari keduanya (setidaknya pada sistem modern). Jika Anda melakukan pekerjaan kalkulator manual maka itu pasti pilihan (kecuali Anda agak masokis). dc
masih dapat memiliki kegunaannya, di sini adalah kasus di mana notasi polish terbalik berguna. Bayangkan Anda memiliki program yang menampilkan aliran angka yang ingin Anda totalkan, misalnya:
23
7
90
74
29
Untuk melakukan ini dengan dc
sangat sederhana (setidaknya dengan implementasi modern di mana setiap operator dapat mengambil lebih dari dua angka) karena Anda hanya perlu menambahkan a +p
ke aliran, misalnya:
{ gen_nums; echo +p } | dc
Tetapi dengan bc
itu lebih kompleks karena kita tidak hanya perlu meletakkan di +
antara setiap angka dan memastikan semuanya ada di baris yang sama, tetapi juga memastikan ada baris baru di akhir:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
contoh penggunaan yang sangat rumit bc
. Ini bisa disederhanakan menjadi:gen_nums | paste -sd+ | bc
bc
hanya alat ujung depan yang menyusun bc
notasi dengan notasi dc
dan menyalurkannya ke dalam dc
untuk mendapatkan hasilnya. Pada FreeBSD masih ada -c
flag bc
yang dengannya Anda masih dapat mengkompilasi ke dc
notasi . For example
echo '3 * 4' | bc` sama dengan echo '3 * 4' | bc -c | dc
. Lihat linux.die.net/man/1/bc dan freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
yang kamu gunakan? Pada Ubuntu 14.04 dan OS X, +
operator selalu beroperasi tepat pada dua nilai dari stack
bc -c
melakukan sesuatu yang aneh dan berbeda (dan -c
benderanya tidak berdokumen). Jika saya mencoba untuk mem-pipe-nya dc
, saya mendapatkan banyak kesalahan (dan output tanpa piping ke dalam dc
adalah sangat samar @iK3:K4:*W@r\n@i
).
Perbedaan mendasar antara keduanya adalah yang dc
menggunakan notasi Polandia terbalik . Itu membutuhkan perintah eksplisit bahkan untuk menghasilkan output.
Anda dapat menambahkan dua bilangan bulat bc
dengan mengatakan:
bc <<< "2+4"
dan itu akan menghasilkan 6
pada garis dengan sendirinya. Namun, dc
Anda harus mengatakan:
dc <<< "2 4 +p"
Anda juga dapat melakukan banyak hal menyenangkan menggunakan dc
, misalnya merujuk pada jawaban saya di sini untuk memproduksi
Hello World!
menggunakan dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
adalah kalkulator sedangkan bc
bahasa sebenarnya. Lihat halaman manual mereka.
bcdc adalah kalkulator meja reverse-polish yang mendukung aritmatika presisi tak terbatas. Ini juga memungkinkan Anda untuk mendefinisikan dan memanggil makro. Biasanya dc membaca dari input standar; jika ada argumen perintah yang diberikan padanya, itu adalah nama file, dan dc membaca dan mengeksekusi isi file sebelum membaca dari input standar. Semua output normal adalah output standar; semua output kesalahan adalah kesalahan standar.
bc adalah bahasa yang mendukung angka presisi acak dengan eksekusi pernyataan interaktif. Ada beberapa kesamaan dalam sintaksis dengan bahasa pemrograman C. Perpustakaan matematika standar tersedia dengan opsi baris perintah. Jika diminta, perpustakaan matematika didefinisikan sebelum memproses file apa pun. bc mulai dengan memproses kode dari semua file yang terdaftar di baris perintah dalam urutan yang tercantum. Setelah semua file diproses, bc membaca dari input standar. Semua kode dieksekusi saat dibaca. (Jika file berisi perintah untuk menghentikan prosesor, bc tidak akan pernah membaca dari input standar.)
Ini benar-benar tergantung pada apa yang Anda ingin lakukan secara matematis. Beberapa operasi tidak dimungkinkan menggunakan dc
. Saya telah menggunakan keduanya selama bertahun-tahun sebagai tambahan pada beberapa alat kalkulator baris perintah lainnya. Lihat " Pemecah ekspresi baris perintah? " Untuk beberapa contoh tambahan.
dc
menjadi notasi polish kalkulator terbalik dan karena aku selalu menggunakan HP terbalik polish kalkulator notasi sebenarnya saya lebih suka menggunakan dc
untuk bc
tapi aku akan mengatakan mereka berdua kapan saja masih digunakan Anda perlu melakukan perhitungan matematika yang kompleks. Saya sering menggunakannya untuk mengonversi angka b / w basis 10 ke basis 16 dan basis 2. Tetapi saya telah menggunakannya untuk menghitung kolom dalam data tabular juga dari dalam skrip AWK.
bc
adalah bahasa dalam arti yang membuatnya dc
ramah manusia - bukan karena lebih kuat. Hari-hari ini aplikasi berbagi libs, tapi bc
itu disebut bahasa dan dc
sebuah kalkulator karena dc
melakukan matematika dan bc
berbicara matematika - untuk dc
. Ini man
halaman yang lebih lama : Bahasa yang disebut BC
[1] telah dikembangkan yang menerima program yang ditulis dalam bahasa tingkat yang lebih tinggi dan mengkompilasi output yang ditafsirkan oleh DC. Beberapa perintah yang dijelaskan di bawah ini dirancang untuk antarmuka kompiler dan tidak mudah bagi pengguna manusia untuk memanipulasi.
dc
juga bahasa. mis. codegolf.stackexchange.com/a/47921/11259
Menurut pendapat saya yang sederhana dan sesedikit mungkin kata, GNU dc berbeda dari GNU bc dalam 3 cara:
1) Jika perpustakaan matematika bc keluar dari keprihatinan, untuk menyimpan sebanyak mungkin penekanan tombol (dalam kata-kata Jan ewukasiewicz: notasi bebas kurung) ketika melakukan aritmatika dasar, untuk lebih berkonsentrasi pada hal-hal penting dan untuk menghindari gangguan.
2) Dalam baris perintah Microsoft Windows 7, GNU dc mengkonsumsi lebih sedikit memori (~ 320K) daripada GNU bc (~ 360K).
3) Banyak kontrol granular dalam GNU dc daripada di GNU bc, misalnya, perintah stack dan register tidak ada pada GNU bc.
Versi 1.07.1 win32 untuk keduanya ada di https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
sangat sering untuk perhitungan sederhana pada baris perintah dan dalam skrip.