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

From Vigyanwiki
(No difference)

Revision as of 10:02, 1 February 2023

bc
Developer(s)बेल लैब्स के रॉबर्ट मॉरिस और लोरिंडा चेरी
Initial releaseTemplate:1975, 47-48 साल पहले
Operating systemयूनिक्स, यूनिक्स कि tarah, प्लान 9, फ्री DOS
Platformक्रॉस -प्लेटफार्म
Typeआज्ञा

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

अवलोकन

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

इतिहास

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

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

कार्यान्वयन

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

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

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

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

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

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

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

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

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

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

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

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

C के समान

मॉड्यूलस ऑपरेटर , % तथा %= बिल्कुल अपने 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 के साथ संघर्ष

संचालक

^ ^ =

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

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

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

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

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

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

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

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

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

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

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

बीसी मानक पुस्तकालय[1]
बीसी कमांड फंक्शन विवरण
s(x) साइन टेक्स  x, ऍन   एंगल  इन  रेडियंस
c(x) कोसाइन टेक्स  x, ऍन   एंगल  इन  रेडियंस
a(x) आर्कटैंजेंट रिटर्न्स  रेडियंस
l(x) नेचुरल लोगरिथ्म
e(x) एक्सपोनेंशियल  फंक्शन
j(n,x) बेसेल फंक्शन रिटर्न्स  द आर्डर -n बेसेल  फंक्शन  ऑफ़  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 अंकों तक π की गणना

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

 $ 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

यह भी देखें

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

संदर्भ

बाहरी संबंध

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