Dc से bc अलग कैसे है?


27

dcऔर bcकैलकुलेटर के बीच अंतर क्या हैं ?

मुझे कब dcऔर bcकैसे उपयोग करना चाहिए ?


मैं exprकमांड लाइन और स्क्रिप्ट्स में सरल गणना के लिए बहुत बार उपयोग करता हूं ।
मैटबियनको

जवाबों:


34

dcएक बहुत पुरातन उपकरण है और कुछ हद तक पुराना है bcविकिपीडिया पृष्ठ उद्धृत करने के लिए :

यह सबसे पुरानी यूनिक्स उपयोगिताओं में से एक है, यहां तक ​​कि सी प्रोग्रामिंग भाषा के आविष्कार से पहले; उस विंटेज की अन्य उपयोगिताओं की तरह, इसमें सुविधाओं का एक शक्तिशाली सेट है, लेकिन एक अत्यंत जटिल वाक्य रचना है।

वाक्यविन्यास एक रिवर्स पॉलिश नोटेशन है, जिसका मूल रूप से मतलब है कि तर्क (यानी संख्या) पहले ऑपरेटर द्वारा पीछा करते हैं। dcउपयोग का एक मूल उदाहरण है:

echo '3 4 * p' | dc

जहां pगणना के परिणाम को प्रिंट करना आवश्यक है। bcदूसरी ओर अधिक परिचित infix संकेतन का उपयोग करता है और इस प्रकार उपयोग करने के लिए अधिक सहज है। यहाँ bcउपयोग का एक उदाहरण है :

echo '3 * 4' | bc

कौन सा उपयोग करना है?

bcPOSIX द्वारा मानकीकृत है और इसलिए शायद दोनों में से अधिक पोर्टेबल है (कम से कम आधुनिक प्रणालियों पर)। यदि आप मैन्युअल कैलकुलेटर का काम कर रहे हैं तो यह निश्चित रूप से पसंद है (जब तक कि आप कुछ मसोचिस्ट नहीं हैं)। dcहालांकि इसके उपयोग अभी भी हो सकते हैं, यहां एक मामला है जहां रिवर्स पॉलिश संकेतन काम में आता है। कल्पना कीजिए कि आपके पास एक कार्यक्रम है जो संख्याओं की एक धारा का उत्पादन करता है जिसे आप कुल करना चाहते हैं, जैसे:

23
7
90
74
29

के साथ ऐसा करने के लिए dcबहुत सरल है (कम से कम आधुनिक कार्यान्वयन के साथ जहां प्रत्येक ऑपरेटर दो से अधिक नंबर ले सकता है) क्योंकि आपको केवल +pस्ट्रीम में संलग्न करना है, जैसे:

{ gen_nums; echo +p } | dc

लेकिन bcयह अधिक जटिल है क्योंकि हमें न केवल प्रत्येक संख्या के + बीच रखने की जरूरत है और सुनिश्चित करें कि सब कुछ एक ही पंक्ति में है, बल्कि यह भी सुनिश्चित करें कि अंत में एक नई रेखा है:

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

10
आपने gen_numsउदाहरण का उपयोग करके जटिल रूप दिया है bc। इसका सरलीकरण किया जा सकता है:gen_nums | paste -sd+ | bc
devnull

14
मजेदार तथ्य: परंपरागत रूप bcसे केवल एक फ्रंट एंड टूल था जिसने bcनोटेशन को संकलित किया dcऔर dcपरिणाम प्राप्त करने के लिए पाइप किया । FreeBSD पर अभी भी वह -cध्वज है bcजिसके लिए आप अभी भी dcसंकेतन . For example प्रतिध्वनि '3 * 4' को संकलित कर सकते हैं bc` के बराबर है echo '3 * 4' | bc -c | dc। देखें linux.die.net/man/1/bc और freebsd.org/cgi/man.cgi?query=bc&sektion=1
राफेल आहरेंस

14
हम्म, जो dcआप उपयोग कर रहे हैं? उबंटू 14.04 और ओएस एक्स पर, +ऑपरेटर हमेशा स्टैक से बिल्कुल दो मानों पर काम करता है
डिजिटल ट्रॉमा

2
dcउपयोग का सही उदाहरण gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp':। यह स्क्रिप्ट dcपढ़ता है और लूप में एक-एक करके नंबर जोड़ता है और फिर परिणाम प्रिंट करता है। नकारात्मक संख्याओं के संबंध में नोट देखें ।
रुविम

1
@RaphaelAhrens दिलचस्प है, macOS पर bc -cकुछ अजीब और अलग होता है (और -cझंडे को अनिर्दिष्ट है)। अगर मैं इसे पाइप करने की कोशिश करता dcहूं, तो मुझे त्रुटियों का एक गुच्छा मिलता है (और बिना पाइपिंग के आउटपुट dcबहुत गूढ़ है @iK3:K4:*W@r\n@i)।
कोनराड रुडोल्फ

9

दोनों के बीच एक बुनियादी अंतर यह है कि रिवर्स पोलिश नोटेशनdc का उपयोग किया जाता है । आउटपुट का उत्पादन करने के लिए भी स्पष्ट कमांड की आवश्यकता होती है।

आप bcकहकर दो पूर्णांक जोड़ सकते हैं :

bc <<< "2+4"

और यह 6एक लाइन पर अपने आप उत्पादन होगा । हालाँकि, dcआपको यह कहना होगा:

dc <<< "2 4 +p"

तुम भी बहुत मज़ा सामान का उपयोग कर सकते हैं dc, उदाहरण के लिए उत्पादन के लिए मेरे जवाब यहाँ देखें

Hello World!

का उपयोग कर dc

डीसी <<< "8 9 * P101P108P108P111P4 8 8 * P81 6 + P111P114P108P100P33P"


"बीसी को डीसी के सामने के छोर के रूप में लिखा गया था"
एडम

3

dcएक कैलकुलेटर है जबकि bcएक वास्तविक भाषा है। उनके मैन पेज देखें।

डीसी

डीसी एक रिवर्स-पॉलिश डेस्क कैलकुलेटर है जो असीमित सटीक अंकगणित का समर्थन करता है। यह आपको मैक्रोज़ को परिभाषित करने और कॉल करने की अनुमति भी देता है। आम तौर पर डीसी मानक इनपुट से पढ़ता है; यदि इसके लिए कोई कमांड तर्क दिया जाता है, तो वे फ़ाइलनाम हैं, और डीसी मानक इनपुट से पढ़ने से पहले फ़ाइलों की सामग्री को पढ़ता है और निष्पादित करता है। सभी सामान्य आउटपुट मानक आउटपुट के लिए है; सभी त्रुटि आउटपुट मानक त्रुटि के लिए है।

बीसी

bc एक भाषा है जो बयानों के संवादात्मक निष्पादन के साथ मनमाने ढंग से सटीक संख्याओं का समर्थन करती है। C प्रोग्रामिंग भाषा के सिंटैक्स में कुछ समानताएँ हैं। एक मानक गणित पुस्तकालय कमांड लाइन विकल्प द्वारा उपलब्ध है। यदि अनुरोध किया गया है, तो किसी भी फाइल को संसाधित करने से पहले गणित पुस्तकालय को परिभाषित किया गया है। bc सूचीबद्ध क्रम में कमांड लाइन पर सूचीबद्ध सभी फाइलों से प्रोसेसिंग कोड द्वारा शुरू होता है। सभी फ़ाइलों को संसाधित करने के बाद, bc मानक मानक इनपुट से पढ़ता है। इसे पढ़ते ही सभी कोड निष्पादित हो जाते हैं। (यदि किसी फ़ाइल में प्रोसेसर को रोकने की आज्ञा है, तो bc कभी भी मानक इनपुट से नहीं पढ़ेगा।)

यह वास्तव में इस बात पर निर्भर करता है कि आप अंततः गणितीय रूप से क्या करना चाहते हैं। कुछ ऑपरेशन का उपयोग संभव नहीं है dc। मैंने कई अन्य कमांड लाइन कैलकुलेटर टूल के अलावा दोनों वर्षों में उपयोग किया है। कुछ अतिरिक्त उदाहरणों के लिए " कमांड लाइन एक्सप्रेशन सॉल्वर? " देखें ।


3
@REACHUS - मुझे यकीन नहीं है कि मैं समझता हूं कि आप क्या पूछ रहे हैं? dcरिवर्स पॉलिश नोटेशन कैलकुलेटर होने के कारण और चूंकि मैंने हमेशा एचपी रिवर्स पॉलिश नोटेशन कैलकुलेटर का उपयोग dcकिया है bc, जो मैं वास्तव में उपयोग करना पसंद करता हूं, लेकिन मैं कहूंगा कि वे अभी भी दोनों का उपयोग कर रहे हैं कभी भी आपको एक जटिल गणितीय गणना करने की आवश्यकता होती है। मैं अक्सर संख्या बी / डब्ल्यू आधार १० को आधार १६ और आधार २ में परिवर्तित करने के लिए उनका उपयोग करता हूं। लेकिन उन्हें सारणीबद्ध डेटा के साथ-साथ एक AWK स्क्रिप्ट के भीतर टैली कॉलम में भी इस्तेमाल किया है।
स्लम

3
bcइस अर्थ में एक भाषा थी कि इसने dcमानव-अनुकूल बनाया - यह नहीं कि यह अधिक शक्तिशाली था। इन दिनों एप्लिकेशन लिबास साझा करते हैं, लेकिन bcएक भाषा और dcएक कैलकुलेटर कहा जाता था क्योंकि dcगणित और गणित से bcबात करता था dcयहां एक पुराना manपृष्ठ है : [1] नामक एक भाषा BCविकसित की गई है जो उच्च-स्तरीय भाषाओं में लिखे गए कार्यक्रमों को स्वीकार करती है और आउटपुट को संकलित करती है जिसकी व्याख्या डीसी द्वारा की जाती है। नीचे वर्णित कुछ कमांड कंपाइलर इंटरफ़ेस के लिए डिज़ाइन किए गए थे और मानव उपयोगकर्ता के लिए हेरफेर करना आसान नहीं है।
मोकेवेर

2
मेरा दावा dcहै कि यह भी एक भाषा है। उदा। codegolf.stackexchange.com/a/47921/11259
डिजिटल ट्रॉमा

1
@DigitalTrauma यह तर्क देने के लिए कि यह कोई भाषा नहीं है क्योंकि यह एक लेसर और पार्सर है। लेकिन यह तर्क देने के लिए कि यह मानव पठनीय है, उदाहरण के लिए, यह बेतुका होगा। मेरा मतलब है ... लानत है।
पार्थियन शॉट

1
@ParthianShot सहमत "Dc एक कैलकुलेटर है जबकि bc एक वास्तविक भाषा है" मेरा पढ़ना यह है कि स्लम का अर्थ है कि dc कोई भाषा नहीं है, जिससे मैं असहमत हूँ। लेकिन मैं सिर्फ गलत जवाब में पढ़ रहा हो सकता है ...
डिजिटल ट्रॉमा

0

मेरी विनम्र राय और यथासंभव कुछ शब्दों में, जीएनयू डीसी जीएनयू बीसी से 3 तरीकों से अलग है:

1) यदि bc की गणित लाइब्रेरी चिंता से बाहर है, तो संभव के रूप में कई कीस्ट्रोक्स को बचाने के लिए (जनवरी zukasiewicz के शब्दों में: एक कोष्ठक मुक्त संकेतन) जब प्राथमिक अंकगणित करते हैं, तो आवश्यक पर अधिक ध्यान केंद्रित करने और विक्षेप से बचने के लिए।

2) Microsoft विंडोज 7 की कमांड लाइन में, GNU dc कम मेमोरी (~ 320K) की खपत करता है, जबकि GNU bc करता है (~ 360K)।

3) जीएनयू डीसी की तुलना में जीएनयू डीसी में बहुत दानेदार नियंत्रण, उदाहरण के लिए, जीएनयू डीसी से स्टैक और रजिस्टर कमांड अनुपस्थित हैं।

दोनों के लिए संस्करण 1.07.1 win32 https://embedeo.org/ws/command_line/bc_dc_calculator_windows/ पर है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.