बीसी (प्रोग्रामिंग भाषा)

बीसी, बेसिक कैलकुलेटर (सामान्य परिगणक) (प्रायः बेंच परिगणक के रूप में जाना जाता है) के लिए, सी (प्रोग्रामिंग भाषा) के समान शब्द योजना के साथ एक यादृच्छिक-परिशुद्धता परिगणक भाषा है। बीसी सामान्यतः गणितीय अंकन भाषा या एक अन्योन्यक्रिया गणितीय कोश के रूप में प्रयोग किया जाता है।

अवलोकन
यूनिक्स कमांड प्रॉम्प्ट पर कमांड बीसी लिखना और एक गणितीय अभिव्यक्ति दर्ज करना एक सामान्य पारस्परिक उपयोग है, जैसे (1 + 3) * 2, जिसके बाद 8 निर्गम होगा। जबकि बीसी अपने तरीके से सटीकता के साथ काम कर सकता है, यह वास्तव में दशमलव बिंदु के बाद शून्य अंकों के लिए चूक करता है, इसलिए अभिव्यक्ति 2/3 परिणाम 0 (परिणामों को छोटा कर दिया जाता है, गोल नहीं)। यह इस तथ्य से अनजान नए बीसी उपयोगकर्ताओं को आश्चर्यचकित कर सकता है। बीसी के लिए -l विकल्प व्यतिक्रम पैमाने पर (दशमलव बिंदु के बाद अंक) को 20 पर सेट करता है और भाषा में कई अतिरिक्त गणितीय कार्यों को जोड़ता है।

इतिहास
बीसी पहली बार 1975 में यूनिक्स के संस्करण 6 में दिखाई दिया। यह बेल लैब्स के लोरिंडा चेरी द्वारा डीसी (कंप्यूटर प्रोग्राम) के फ्रंट एंड के रूप में लिखा गया था, जो रॉबर्ट मॉरिस (क्रिप्टोग्राफर) और चेरी द्वारा लिखित एक यादृच्छिक-परिशुद्धता परिगणक है। डीसी ने रिवर्स पोलिश नोटेशन में निर्दिष्ट यादृच्छिक-परिशुद्ध संगणनाएँ कीं। बीसी ने एक साधारण संकलक (कोड की कुछ सौ पंक्तियों वाली एक एकल याक्क स्रोत फ़ाइल) के माध्यम से समान क्षमता के लिए एक पारंपरिक प्रोग्रामिंग-भाषा अंतरापृष्ठ प्रदान किया, जिसने सी (प्रोग्रामिंग भाषा)-जैसे वाक्य - विन्यास को डीसी संकेतन में परिवर्तित कर दिया और डीसी के माध्यम से परिणामों को पाइपड (यूनिक्स) कर दिया।

1991 में, पॉज़िक्स ने बीसी को सख्ती से परिभाषित और मानकीकृत किया। इस मानक के तीन कार्यान्वयन आज भी मौजूद हैं, पहला पारंपरिक यूनिक्स कार्यान्वयन है, जो डीसी के लिए एक फ्रंट-एंड है, जो यूनिक्स और प्लान 9 तंत्र में मौजूद है। दूसरा मुफ्त सॉफ्टवेयर जीएनयू बीसी है, जिसे पहली बार 1991 में फिलिप ए. नेल्सन द्वारा जारी किया गया था। जीएनयू कार्यान्वयन में पॉज़िक्स के मानक के अलावा कई एक्सटेंशन हैं और यह अब डीसी का फ्रंट-एंड नहीं है (यह एक बायटेकोड दुभाषिया है)। तीसरा 2003 में ओपनबीएसडी द्वारा पुन: कार्यान्वयन है।

पॉज़िक्स बीसी
पॉज़िक्स मानकीकृत बीसी भाषा पारंपरिक रूप से डीसी (कंप्यूटर प्रोग्राम) प्रोग्रामिंग भाषा में एक प्रोग्राम के रूप में लिखी जाती है, जो डीसी भाषा की सुविधाओं के लिए डीसी के संक्षिप्त वाक्यविन्यास की जटिलताओं के बिना उच्च स्तर की पहुंच प्रदान करती है।

इस रूप में, बीसी भाषा में एकल-अक्षर चर (प्रोग्रामिंग), सरणी डेटा संरचना और फलन (प्रोग्रामिंग) नाम और अधिकांश मानक अंकगणितीय संचालक होते हैं, साथ ही परिचित नियंत्रण-प्रवाह निर्माण (,   तथा  ) सी से। सी के विपरीत, एक  उपवाक्य का पालन एक   द्वारा नहीं किया जा सकता है।

कार्यों को एक संकेतशब्द का उपयोग करके परिभाषित किया गया है, और कोष्ठकों में वापसी मूल्य के बाद   संकेतशब्द (C में वैकल्पिक) का उपयोग किसी चर को किसी फलन के लिए स्थानीय घोषित करने के लिए किया जाता है।

सभी संख्याएँ और चर सामग्री यादृच्छिक-परिशुद्ध संख्याएँ हैं जिनकी सटीकता (दशमलव स्थानों में) वैश्विक

(निवेश बेस) और (निर्गम बेस) चर को व्यवस्थित करके निवेश का संख्यात्मक आधार (अन्योन्यक्रिया अवस्था में), निर्गम और प्रोग्राम स्थिरांक निर्दिष्ट किए जा सकते हैं।

गणना के परिणाम को जानबूझकर एक चर के लिए निर्दिष्ट नहीं करके निर्गम उत्पन्न किया जाता है।

तथा (शुरुआत और अंत टिप्पणी) प्रतीकों का उपयोग करके जोड़ा जा सकता है।

गणितीय संचालक
बिल्कुल C के रूप में

निम्नलिखित पॉज़िक्स बीसी ऑपरेटर (प्रोग्रामिंग) बिल्कुल उनके सी समकक्षों की तरह व्यवहार करते हैं-

+ - * / += -= *= /= ++ -- < > == != <= >=  [] { }

C के समान

मॉड्यूलस ऑपरेटर,  तथा   बिल्कुल अपने C समकक्षों की तरह ही व्यवहार करते हैं जब वैश्विक  चर को 0 पर व्यवस्थित किया जाता है,  यानी सभी गणनाएँ केवल-पूर्णांक हैं। अन्यथा गणना उचित पैमाने के साथ की जाती है।   को   के रूप में परिभाषित किया गया है। उदाहरण:

$ bc

bc 1.06

Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'. scale=0; 5%3

2

scale=1; 5%3

.2

scale=20; 5%3

.00000000000000000002

C के साथ संघर्ष

संचालक

^ ^ =

सतही रूप से C बिटवाइज़ एक्सक्लूसिव-या संचालक से मिलते जुलते हैं, लेकिन वास्तव में बीसी पूर्णांक घातांक संचालक हैं।

विशेष रूप से ध्यान दें, ऋणात्मक संख्या वाले  संचालक का उपयोग सी संचालक प्राथमिकता का पालन नहीं करता है।  -4 के बजाय बीसी के अंतर्गत 4 का उत्तर देता है।

सी के सापेक्ष अनुपस्थित संचालक

बिटवाइज़ संचालन, बूलियन लॉजिक और सशर्त (प्रोग्रामिंग) संचालक:

&    |     ^     &&    ||                                                                                                                     &=    |=    ^=    &&=   ||= <<    >> <<=   >>= ?:

पॉज़िक्स बीसी में उपलब्ध नहीं हैं।

बिल्ट-इन फंक्शन्स (अंतर्निहित फलन)
वर्गमूल की गणना के लिए, पॉज़िक्स बीसी का एकमात्र अंतर्निहित गणितीय कार्य है। अन्य कार्य बाहरी मानक पुस्तकालय में उपलब्ध हैं।

सटीकता निर्धारित करने के लिए (जैसा कि चर) इसके तर्क और इसके तर्क में महत्वपूर्ण दशमलव अंकों की संख्या निर्धारित करने के लिए कार्य भी अंतर्निहित हैं।

मानक पुस्तकालय कार्य
बीसी की मानक गणित लाइब्रेरी (-एल विकल्प के साथ परिभाषित) में ज्या, कोज्या, स्पर्शरेखा, प्राकृतिक लघुगणक, घातीय कार्य और दो पैरामीटर बेसेल फलन 'जे' की गणना के लिए फलन शामिल हैं। इनका उपयोग करके अधिकांश मानक गणितीय कार्यों (अन्य व्युत्क्रम त्रिकोणमितीय कार्यों सहित) का निर्माण किया जा सकता है। कई अन्य कार्यों के कार्यान्वयन के लिए बाहरी लिंक देखें। -l विकल्प स्केल को 20 में बदल देता है, इसलिए मोडुलो जैसी चीजें अप्रत्याशित रूप से काम कर सकती हैं। उदाहरण के लिए, लेखन  और फिर आदेश   निर्गम 0। लेकिन लेखन   बाद में   और फिर आदेश   निर्गम 1 होगा।

योजना 9 ई.पू.
बीसी से योजना 9 पॉज़िक्स बीसी के समान है लेकिन एक अतिरिक्त कथन के लिए।

जीएनयू बीसी
जीएनयू बीसी पॉज़िक्स मानक से निकला है और इसमें कई संवर्द्धन शामिल हैं। यह पॉज़िक्स मानक के डीसी -आधारित कार्यान्वयन से पूरी तरह से अलग है और इसके बजाय C में लिखा गया है। फिर भी, यह पूरी तरह से पीछे की ओर संगत है क्योंकि सभी पॉज़िक्स बीसी प्रोग्राम जीएनयू बीसी प्रोग्राम के रूप में अपरिवर्तित चलेंगे।

जीएनयू बीसी चर, सरणी और फलन के नामों में एक से अधिक वर्ण हो सकते हैं, कुछ और संचालकों को सी से शामिल किया गया है, और विशेष रूप से, एक क्लॉज़ का के द्वारा अनुगमन किया जा सकता है।

निर्गम या तो विचारपूर्वक एक चर (पॉज़िक्स तरीका) की गणना के परिणाम को निर्दिष्ट नहीं करके या जोड़े गए  कथन का उपयोग करके प्राप्त किया जाता है।

इसके अलावा, एक कथन किसी संख्या के पारस्परिक निवेश को संचालन गणना में अनुमति देता है।

सी-शैली टिप्पणियों के अलावा, एक चरित्र इसके बाद सब कुछ का कारण बनेगा जब तक कि अगली नई-पंक्ति को अनदेखा नहीं किया जाएगा।

अंतिम गणना का मान हमेशा चर के अतिरिक्त अंतः संग्रहीत होता है।

अतिरिक्त संचालक
पॉज़िक्स बीसी में निम्नलिखित लॉजिकल संचालक अतिरिक्त हैं-

&& || !

वे सशर्त कथनो में उपयोग के लिए उपलब्ध हैं (जैसे कि एक के भीतर बयान)। हालाँकि, ध्यान दें कि अभी भी कोई समतुल्य बिटवाइज़ या असाइनमेंट संचालन नहीं हैं।

कार्य
जीएनयू बीसी में उपलब्ध सभी कार्य पॉज़िक्स से पूर्व पीढ़ियों में मिले हैं। जीएनयू वितरण के साथ मानक के रूप में आगे कोई कार्य प्रदान नहीं किया गया है।

उदाहरण कोड
चूंकि बीसी  संचालक केवल एक पूर्णांक घात को उसके दाईं ओर अनुमति देता है, एक बीसी उपयोगकर्ता द्वारा लिखे जाने वाले पहले कार्यों में से एक फ्लोटिंग-पॉइंट एक्सपोनेंट वाला एक घातांक वाला फलन है। नीचे दिए गए दोनों मानते हैं कि मानक पुस्तकालय को शामिल किया गया है:

पॉज़िक्स बीसी में एक घातांक फलन /* A function to return the integer part of x */                                                                                                        define i(x) { auto s    s = scale scale = 0 x /= 1  /* round x down */ scale = s    return (x) } /* Use the fact that x^y == e^(y*log(x)) */ define p(x,y) { if (y == i(y)) { return (x ^ y)    } return ( e( y * l(x) ) ) }

10000 अंकों तक π की गणना
अंतर्निहित व्युत्क्रम त्रिकोणमितीय फलन का उपयोग करके पाई की गणना करें, $ bc -lq

scale=10000 4*a(1) # The atan of 1 is 45 degrees, which is pi/4 in radians. # This may take several minutes to calculate.

एक अनुवादित सी फलन
चूंकि बीसी का वाक्य विन्यास सी (प्रोग्रामिंग भाषा) के समान है, सी में लिखे गए प्रकाशित संख्यात्मक कार्यों को अक्सर आसानी से बीसी में अनुवादित किया जा सकता है, जो तुरंत बीसी की मनमानी सटीकता प्रदान करता है। उदाहरण के लिए, जर्नल ऑफ स्टैटिस्टिकल सॉफ्टवेयर (जुलाई 2004, वॉल्यूम 11, अंक 5) में, जॉर्ज मार्सग्लिया ने सामान्य वितरण के लिए निम्नलिखित सी कोड प्रकाशित किया: बीसी के विभिन्न वाक्य विन्यास को समायोजित करने के लिए कुछ आवश्यक परिवर्तनों के साथ, और यह महसूस करते हुए कि निरंतर 0.9189... वास्तव में लॉग (2 * पीआई)/2 है, इसे निम्नलिखित जीएनयू बीसी कोड में अनुवादित किया जा सकता है: define phi(x) {                                                                                                                                auto s,t,b,q,i,const s=x; t=0; b=x; q=x*x; i=1 while(s!=t) s=(t=s)+(b*=q/(i+=2)) const=0.5*l(8*a(1))  # 0.91893... return .5+s*e(-.5*q-const) }

शेल स्क्रिप्ट्स में बीसी का उपयोग
एक पाइप (यूनिक्स) के माध्यम से इनपुट के साथ, बीसी का उपयोग गैर-संवादात्मक रूप से किया जा सकता है। यह शेल स्क्रिप्ट के अंदर उपयोगी है। उदाहरण के लिए

$ result=$(echo "scale=2; 5 * 7 /3;" | bc)

$ echo $result

11.66

इसके विपरीत, ध्यान दें कि बैश शेल केवल पूर्णांक अंकगणित करता है, जैसे:

$ result=$((5 * 7 /3))

$ echo $result

11

कोई यहाँ-स्ट्रिंग मुहावरे (बैश, केएसएच, सीएसएच में) का भी उपयोग कर सकता है:

$ bc -l <<< "5*7/3"

11.66666666666666666666

यह भी देखें

 * डीसी (कंप्यूटर प्रोग्राम)
 * सी (प्रोग्रामिंग भाषा)
 * हॉक (प्रोग्रामिंग भाषा)

संदर्भ

 * GNU bc manual page
 * POSIX bc manual page
 * 7th Edition Unix bc manual page
 * A comp.compilers article on the design and implementation of C-bc
 * 6th Edition Unix bc source code, the first release of bc, from May 1975, compiling bc syntax into dc syntax
 * GNU bc source code
 * 6th Edition Unix bc source code, the first release of bc, from May 1975, compiling bc syntax into dc syntax
 * GNU bc source code

बाहरी संबंध

 * Dittmer, I. 1993. Error in Unix commands dc and bc for multiple-precision-arithmetic. SIGNUM Newsl. 28, 2 (Apr. 1993), 8–11.
 * Collection of useful GNU bc functions
 * GNU bc (and an alpha version) from the Free Software Foundation
 * bc for Windows from GnuWin32
 * Gavin Howard bc - another open source implementation of bc by Gavin Howard with GNU and BSD extensions
 * X-bc - A Graphical User Interface to bc
 * extensions.bc - contains functions of trigonometry, exponential functions, functions of number theory and some mathematical constants
 * scientific_constants.bc - contains particle masses, basic constants, such as speed of light in the vacuum and the gravitational constant