Câu trả lời:
dc
là một công cụ rất cổ xưa và có phần cũ hơn bc
. Để trích dẫn trang Wikipedia :
Nó là một trong những tiện ích Unix lâu đời nhất, trước cả việc phát minh ra ngôn ngữ lập trình C; Giống như các tiện ích khác của cổ điển đó, nó có một bộ tính năng mạnh mẽ nhưng cú pháp cực kỳ ngắn gọn.
Cú pháp là một ký hiệu đánh bóng ngược, về cơ bản có nghĩa là các đối số (tức là số) đến trước theo sau bởi toán tử. Một ví dụ cơ bản về việc dc
sử dụng là:
echo '3 4 * p' | dc
Trường hợp p
được yêu cầu để in kết quả tính toán. bc
mặt khác sử dụng ký hiệu infix quen thuộc hơn và do đó trực quan hơn để sử dụng. Dưới đây là một ví dụ về bc
việc sử dụng:
echo '3 * 4' | bc
bc
được chuẩn hóa bởi POSIX và do đó có lẽ là tính di động cao hơn của cả hai (ít nhất là trên các hệ thống hiện đại). Nếu bạn đang làm công việc tính toán thủ công thì đó chắc chắn là sự lựa chọn (trừ khi bạn có phần nào đó là một masochist). dc
Vẫn có thể sử dụng được, đây là trường hợp ký hiệu đánh bóng ngược có ích. Hãy tưởng tượng bạn có một chương trình tạo ra một luồng số mà bạn muốn tổng cộng, ví dụ:
23
7
90
74
29
Để thực hiện việc này dc
rất đơn giản (ít nhất là với các triển khai hiện đại, trong đó mỗi toán tử có thể mất nhiều hơn hai số) vì bạn chỉ phải nối một +p
luồng vào luồng, ví dụ:
{ gen_nums; echo +p } | dc
Nhưng với bc
nó phức tạp hơn vì chúng ta không chỉ cần đặt một số +
giữa mỗi số và đảm bảo mọi thứ nằm trên cùng một dòng, mà còn đảm bảo có một dòng mới ở cuối:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
ví dụ phức tạp khủng khiếp bằng cách sử dụng bc
. Nó có thể được đơn giản hóa thành:gen_nums | paste -sd+ | bc
bc
chỉ là một công cụ mặt trước biên soạn bc
ký hiệu cho ký hiệu dc
và đưa nó vào dc
để có được kết quả. Trên FreeBSD vẫn có -c
cờ bc
mà bạn vẫn có thể biên dịch thành tiếng vang dc
ký hiệu . For example
'3 * 4' | bc` bằng echo '3 * 4' | bc -c | dc
. Xem linux.die.net/man/1/bc và freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
bạn đang sử dụng? Trên Ubuntu 14.04 và OS X, +
nhà điều hành luôn vận hành chính xác hai giá trị ngoài ngăn xếp
bc -c
có một cái gì đó kỳ lạ và khác biệt (và -c
cờ không có giấy tờ). Nếu tôi cố gắng đưa nó vào dc
, tôi sẽ gặp một loạt lỗi (và đầu ra mà không có đường ống vào dc
là rất khó hiểu @iK3:K4:*W@r\n@i
).
Một sự khác biệt cơ bản giữa hai là dc
sử dụng ký hiệu Ba Lan ngược . Nó đòi hỏi các lệnh rõ ràng ngay cả để tạo ra một đầu ra.
Bạn có thể thêm hai số nguyên bc
bằng cách nói:
bc <<< "2+4"
và nó sẽ tự sản xuất 6
trên một dây chuyền. Tuy nhiên, trong dc
bạn cần phải nói:
dc <<< "2 4 +p"
Bạn cũng có thể làm nhiều thứ thú vị bằng cách sử dụng dc
, ví dụ tham khảo câu trả lời của tôi ở đây để sản xuất
Hello World!
sử dụng dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
là một máy tính trong khi đó bc
là một ngôn ngữ thực tế. Xem trang người đàn ông của họ.
bcdc là một máy tính bàn đánh bóng ngược hỗ trợ số học chính xác không giới hạn. Nó cũng cho phép bạn xác định và gọi macro. Thông thường dc đọc từ đầu vào tiêu chuẩn; nếu bất kỳ đối số lệnh nào được đưa cho nó, chúng là tên tệp và dc đọc và thực thi nội dung của tệp trước khi đọc từ đầu vào tiêu chuẩn. Tất cả đầu ra bình thường là đầu ra tiêu chuẩn; tất cả đầu ra lỗi là lỗi tiêu chuẩn.
bc là một ngôn ngữ hỗ trợ các số chính xác tùy ý với việc thực hiện các câu lệnh tương tác. Có một số điểm tương đồng trong cú pháp với ngôn ngữ lập trình C. Một thư viện toán học tiêu chuẩn có sẵn bằng tùy chọn dòng lệnh. Nếu được yêu cầu, thư viện toán học được xác định trước khi xử lý bất kỳ tệp nào. bc bắt đầu bằng cách xử lý mã từ tất cả các tệp được liệt kê trên dòng lệnh theo thứ tự được liệt kê. Sau khi tất cả các tệp đã được xử lý, bc đọc từ đầu vào tiêu chuẩn. Tất cả các mã được thực thi khi nó được đọc. (Nếu một tệp chứa lệnh dừng bộ xử lý, bc sẽ không bao giờ đọc từ đầu vào tiêu chuẩn.)
Nó thực sự phụ thuộc vào những gì cuối cùng bạn muốn làm toán học. Một số thao tác không thể sử dụng dc
. Tôi đã sử dụng cả hai năm qua cùng với một số công cụ tính toán dòng lệnh khác. Xem " Bộ giải biểu thức dòng lệnh? " Để biết thêm một số ví dụ.
dc
là một máy tính Kí pháp Ba Lan đảo ngược và vì tôi đã luôn luôn sử dụng HP ngược tính Kí pháp Ba Lan Tôi thực sự thích sử dụng dc
để bc
nhưng tôi sẽ nói rằng họ đang cả bất cứ lúc nào vẫn sử dụng bạn cần phải thực hiện một phép tính toán học phức tạp. Tôi thường sử dụng chúng để chuyển đổi số b / w cơ sở 10 sang cơ sở 16 và cơ sở 2. Nhưng đã sử dụng chúng để kiểm tra các cột trong dữ liệu dạng bảng cũng như trong tập lệnh AWK.
bc
là một ngôn ngữ theo nghĩa nó làm cho dc
con người trở nên thân thiện - không phải là nó mạnh hơn. Những ngày này các ứng dụng chia sẻ libs, nhưng bc
được gọi là một ngôn ngữ và dc
một máy tính vì dc
đã làm toán và bc
phát biểu toán - để dc
. Đây là một man
trang cũ hơn : Một ngôn ngữ có tên BC
[1] đã được phát triển để chấp nhận các chương trình được viết bằng ngôn ngữ cấp cao hơn và biên dịch đầu ra được DC giải thích. Một số lệnh được mô tả dưới đây được thiết kế cho giao diện trình biên dịch và không dễ để người dùng thao tác.
dc
cũng là một ngôn ngữ. ví dụ: codegolf.stackexchange.com/a/47921/11259
Theo ý kiến khiêm tốn của tôi và càng ít từ càng tốt, GNU dc khác với GNU bc theo 3 cách:
1) Nếu thư viện toán học của bc không được quan tâm, để lưu càng nhiều tổ hợp phím càng tốt (theo cách nói của Jan Łukasiewicz: một ký hiệu không có dấu ngoặc đơn) khi làm số học cơ bản, để tập trung hơn vào các yếu tố cần thiết và để tránh phiền nhiễu.
2) Trong dòng lệnh của Microsoft Windows 7, GNU dc tiêu thụ ít bộ nhớ (~ 320K) hơn GNU bc (~ 360K).
3) Nhiều điều khiển chi tiết trong GNU dc hơn trong GNU bc, ví dụ, các lệnh stack và register không có trong GNU bc.
Phiên bản 1.07.1 win32 cho cả hai có tại https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
rất thường xuyên cho các tính toán đơn giản trên dòng lệnh và trong các kịch bản.