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

From Vigyanwiki
Revision as of 23:47, 16 December 2022 by alpha>Pranjalikushwaha (Text edit)
bc
Developer(s)Robert Morris and Lorinda Cherry of Bell Labs
Initial releaseTemplate:Release year
Operating systemUnix, Unix-like, Plan 9, FreeDOS
PlatformCross-platform
TypeCommand

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

अवलोकन

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

इतिहास

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

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

कार्यान्वयन

पॉज़िक्स बीसी

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

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

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

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

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

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

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

गणितीय संचालक

बिल्कुल सी के रूप में

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

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

सी के समान

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

$ 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 बिटवाइज़ एक्सक्लूसिव-या ऑपरेटर्स से मिलते जुलते हैं, लेकिन वास्तव में बीसी पूर्णांक घातांक ऑपरेटर हैं।

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

सी के सापेक्ष अनुपस्थित ऑपरेटर

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

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

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

बिल्ट-इन फंक्शन्स (अंतर्निहित कार्य)

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

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

मानक पुस्तकालय कार्य

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

The bc standard library[1]
bc command Function Description
s(x) Sine Takes x, an angle in radians
c(x) Cosine Takes x, an angle in radians
a(x) Arctangent Returns radians
l(x) Natural logarithm
e(x) Exponential function
j(n,x) Bessel function Returns the order-n Bessel function of x.

-l विकल्प स्केल को 20 में बदल देता है,[1]इसलिए मोडुलो जैसी चीजें अप्रत्याशित रूप से काम कर सकती हैं। उदाहरण के लिए, लेखन bc -l और फिर आदेश print 3%2 निर्गम 0। लेकिन लेखन scale=0 बाद में bc -l और फिर आदेश print 3%2 निर्गम 1 होगा।

योजना 9 ई.पू.

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

जीएनयू बीसी

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

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

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

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

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

अंतिम गणना का मान हमेशा lastचर के अतिरिक्त बिल्ट-इन में संग्रहीत होता है।

अतिरिक्त ऑपरेटर्स

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

&& || !

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

कार्य

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

उदाहरण कोड

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

पॉज़िक्स बीसी में एक घातांक वाला फ़ंक्शन

 /* 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 अंकों तक π की गणना

अंतर्निहित व्युत्क्रम त्रिकोणमितीय फ़ंक्शन फ़ंक्शन का उपयोग करके पाई की गणना करें, a()

   $ 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) में, जॉर्ज मार्सग्लिया ने सामान्य वितरण के लिए निम्नलिखित सी कोड प्रकाशित किया:

   double Phi(double x)                                                                                                                                   {
    long double s=x,t=0,b=x,q=x*x,i=1;
    while(s!=t)
        s=(t=s)+(b*=q/(i+=2));
    return .5+s*exp(-.5*q-.91893853320467274178L);
}

बीसी के विभिन्न वाक्य विन्यास को समायोजित करने के लिए कुछ आवश्यक परिवर्तनों के साथ, और यह महसूस करते हुए कि निरंतर 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

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

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

11.66666666666666666666

यह भी देखें

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

संदर्भ

बाहरी संबंध

  1. 1.0 1.1 bc: arbitrary-precision arithmetic language – Shell and Utilities Reference, The Single UNIX Specification, Version 4 from The Open Group