Bc'nin dc'den farkı nedir?


27

Hesap makineleri dcve arasındaki farklar nelerdir bc?

Ne zaman dcve ne zaman kullanmalıyım bc?


exprKomut satırında ve komut dosyalarında basit hesaplamalar için çok sık kullanıyorum .
MattBianco

Yanıtlar:


34

dcçok eski bir araç ve biraz daha eski bc. Wikipedia sayfasını alıntı yapmak için :

C programlama dilinin icatını bile başlatan en eski Unix uygulamalarından biridir; Bu bağbozumu diğer yardımcı programları gibi, güçlü bir dizi özellik ancak son derece veciz bir sözdizimi vardır.

Sözdizimi, temel olarak argümanların (yani sayıların) önce operatör tarafından geldiği anlamına gelen bir ters cila gösterimidir. dcKullanımın temel bir örneği :

echo '3 4 * p' | dc

Nerede phesaplamanın sonucu yazdırmak için gereklidir. bcÖte yandan, daha bilinen bir ek gösterimi kullanır ve bu nedenle kullanımı daha sezgiseldir. İşte bir bckullanım örneği :

echo '3 * 4' | bc

Hangisini kullanmak?

bcPOSIX tarafından standartlaştırılmıştır ve bu yüzden muhtemelen ikisi arasında en taşınabilir olanıdır (en azından modern sistemlerde). Manuel hesap makinesi işi yapıyorsanız, o zaman kesinlikle bir seçimdir (biraz mazoşist olmadıkça). dcYine de kullanımlarına sahip olabilir, burada ters cila gösterimi kullanışlı bir durumdur. Toplamak istediğiniz sayı akışını çıkaran bir programınız olduğunu hayal edin, örneğin:

23
7
90
74
29

Bunu yapmak dcçok basittir (en azından her operatörün ikiden fazla sayı alabildiği modern uygulamalarda), çünkü yalnızca +pakışa bir a eklemelisiniz, örneğin:

{ gen_nums; echo +p } | dc

İle Ama bcbiz sadece koymak gerekmez beri daha karmaşıktır + arasında yapmak da her sayı ve her şeyin aynı hat üzerindedir yapmak, ama emin sonunda bir satır vardır:

{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc

10
gen_numsÖrneğini kullanarak çok karmaşık bir hale getirdiniz bc. Basitleştirilebilir:gen_nums | paste -sd+ | bc
devnull

14
Eğlenceli gerçek: Geleneksel olarak bc, sadece sonucu almak için bcgösterimini dcyazdıran ve içine yerleştiren bir ön uç araçtı dc. FreeBSD'de hala eko '3 * 4' notasyonuna göre derleyebileceğiniz bir -cbayrak var. bc` eşittir . Bkz linux.die.net/man/1/bc ve freebsd.org/cgi/man.cgi?query=bc&sektion=1bcdc. For example echo '3 * 4' | bc -c | dc
Raphael Ahrens

14
Hangisini dckullanıyorsun? Ubuntu 14.04 ve OS X'de, +operatör her zaman istiflemenin tam iki değeri üzerinde çalışır
Digital Trauma,

2
Doğru bir örnek dckullanılmaktadır: gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'. Bu komut dosyası dc, döngüdeki sayıları tek tek okur ve ekler ve sonucu yazdırır. Negatif sayılarla ilgili nota bakın .
ruvim

1
@RaphaelAhrens İlginç, macOS'ta bc -cgarip ve farklı bir şeyler yapar (ve -cbayrak belgesizdir). Eğer onu boruya sokmaya çalışırsam dc, bir sürü hata alıyorum (ve boruya takılmayan çıktı dcçok şifreli @iK3:K4:*W@r\n@i).
Konrad Rudolph

9

İkisi arasındaki temel fark dc, ters Polonya gösterimini kullanmasıdır . Bir çıktı üretmek için bile açık komutlar gerektirir.

Şöyle iki tam sayı ekleyebilirsiniz bc:

bc <<< "2+4"

ve 6tek başına bir hat üzerinde üretecekti . Ancak şunu dcsöylemelisin:

dc <<< "2 4 +p"

Kullanarak çok eğlenceli şeyler de yapabilirsiniz dc, örneğin üretmek için buradaki cevaba bakın.

Hello World!

kullanarak dc.

dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"


"Bc Dc için bir ön uç olarak yazılmıştır"
Adam

3

dchesap makinesi ise bcgerçek bir dildir. Adam sayfalarına bakın.

dC

dc, sınırsız hassasiyetli aritmetiği destekleyen bir ters cila masası hesaplayıcısıdır. Ayrıca makroları tanımlamanızı ve çağırmanızı sağlar. Normalde dc standart girişten okur; eğer herhangi bir komut argümanı verildiyse, bunlar dosya isimleridir ve dc standart girdiden okumadan önce dosyaların içeriğini okur ve yürütür. Tüm normal çıktı standart çıktıya; tüm hata çıktıları standart hatadır.

M.Ö

bc, isteğe bağlı hassas sayıları, ifadelerin etkileşimli olarak yürütülmesini destekleyen bir dildir. C programlama dilinin sözdiziminde bazı benzerlikler vardır. Standart bir matematik kütüphanesi komut satırı seçeneği ile kullanılabilir. İstenirse, matematik kitaplığı herhangi bir dosyayı işlemeden önce tanımlanır. bc, komut satırında listelenen tüm dosyaların kodlarını listelenen sırayla işleyerek başlar. Tüm dosyalar işlendikten sonra, bc standart girdiden okur. Tüm kod okunduğu gibi yürütülür. (Bir dosya işlemciyi durdurmak için bir komut içeriyorsa, bc asla standart girdiden okumaz.)

Bu gerçekten nihayetinde matematiksel olarak yapmak istediğiniz şeye bağlıdır. Bazı işlemler kullanmak mümkün değildir dc. Her iki yılda birkaç diğer komut satırı hesap makinesi araçlarına ek olarak kullandım. Bazı ek örnekler için bkz. " Komut satırı ifadesi çözücü? "


3
@REACHUS - Ne istediğini anladığımdan emin değilim? Nedeniyle dchep HP ters cila notasyonu hesap kullandım ters cila notasyonu hesap makinesi olmak ve o zamandan beri ben aslında kullanmayı tercih dcetmek bcama onlar karmaşık bir matematiksel hesaplama gerçekleştirmek için gereken her ikisi hala kullanılan zaman konum söyleyebilirim. Onları b / w base 10 ile base 16 ve base 2'ye dönüştürmek için sık sık kullanırım. Fakat bunları bir AWK betiğinden de tablo halinde veri sütunlarına yerleştirmek için kullandım.
slm

3
bcBir oldu dil o yapılan anlamda dcdaha güçlüydü değil - insan dostu. Bugünlerde uygulamalar kütüphanelerini paylaşan, ancak bcbir çağrıldı dili ve dcbir hesap makinesi çünkü dcmatematik yaptım ve bcmatematik konuştu - için dc. İşte daha eski bir mansayfa : [1] adı verilen bir dil BC, üst seviye dillerde yazılmış programları kabul eden ve DC tarafından yorumlanan çıktıları derleyen bir dil geliştirildi. Aşağıda açıklanan komutların bazıları derleyici arayüzü için tasarlanmıştır ve bir insan kullanıcısının manipüle etmesi kolay değildir.
mikeserv

2
dcAyrıca bir dil olduğunu iddia ediyorum . örneğin codegolf.stackexchange.com/a/47921/11259
Dijital Travma

1
@DigitalTrauma Bir dil olmadığını ve bir ayrıştırıcıya sahip olduğu için saçma olacağını iddia etmek. Ancak iddiaya göre, insan tarafından okunabilir, bu örnek verildiğinde saçma olur. Yani ... kahretsin.
Parthian Shot,

1
@ParthianShot Anlaşıldı. "Dc bir hesap makinesiyken, bc gerçek bir dildir" ifadesini okuduğumda slm, dc'nin aynı fikirde olmadığım bir dil olmadığını ima ediyor. Ama sadece yanlış cevabı okuyor olabilirim ...
Digital Trauma

0

Alçakgönüllü görüşüme göre ve olabildiğince az sözle, GNU dc GNU bc'den 3 şekilde ayrılır:

1) bc'nin matematik kütüphanesi kaygı duymuyorsa, basit aritmetik işlemi yaparken, temel maddelere daha fazla konsantre olmak ve dikkat dağıtıcı şeylerden kaçınmak için olabildiğince fazla tuşa basılması (Jan Łukasiewicz’in sözlerinde: parantezsiz gösterim).

2) Microsoft Windows 7'nin komut satırında, GNU dc, GNU bc'den (~ 360K) daha az bellek harcar (~ 320K).

3) GNU dc'de GNU bc'de olduğundan daha fazla granüler kontrol, örneğin yığın ve yazma komutları GNU bc'de yoktur.

Her ikisi için sürüm 1.07.1 win32 https://embedeo.org/ws/command_line/bc_dc_calculator_windows/ adresindedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.