बीसी (प्रोग्रामिंग भाषा)
Developer(s) | Robert Morris and Lorinda Cherry of Bell Labs |
---|---|
Initial release | Template:Release year |
Operating system | Unix, Unix-like, Plan 9, FreeDOS |
Platform | Cross-platform |
Type | Command |
बीसी, बेसिक कैलकुलेटर (अक्सर बेंच कैलकुलेटर के रूप में जाना जाता है) के लिए, सी (प्रोग्रामिंग लैंग्वेज) के समान शब्द योजना के साथ एक आरबिटर-परिशुद्धता कैलकुलेटर भाषा है। बीसी आमतौर पर गणितीय अंकन भाषा या एक अन्योन्यक्रिया गणितीय कोश के रूप में प्रयोग किया जाता है।
अवलोकन
यूनिक्स कमांड प्रॉम्प्ट पर कमांड बीसी टाइप करना और एक गणितीय अभिव्यक्ति दर्ज करना एक सामान्य पारस्परिक उपयोग है, जैसे (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
के रूप में परिभाषित किया गया है। उदाहरण:
<वाक्यविन्यास लैंग = कंसोल हाइलाइट = 6,8,10> $ ई.पू बीसी 1.06 कॉपीराइट 1991-1994, 1997, 1998, 2000 फ्री सॉफ्टवेयर फाउंडेशन, इंक। यह बिल्कुल मुफ्त सॉफ्टवेयर है जिसमें बिल्कुल कोई वारंटी नहीं है। विवरण के लिए 'वारंटी' टाइप करें। पैमाना = 0; 5% 3 2 पैमाना = 1; 5% 3 .2 पैमाना = 20; 5% 3 .00000000000000000002 </वाक्यविन्यास हाइलाइट>
सी के साथ संघर्ष
संचालक
^ ^ =
सतही रूप से C बिटवाइज़ एक्सक्लूसिव-या ऑपरेटर्स से मिलते जुलते हैं, लेकिन वास्तव में बीसी पूर्णांक घातांक ऑपरेटर हैं।
विशेष रूप से ध्यान दें, ऋणात्मक संख्या वाले ^
ऑपरेटर का उपयोग सी ऑपरेटर प्राथमिकता का पालन नहीं करता है।-2^2
-4 के बजाय बीसी के अंतर्गत 4 का उत्तर देता है।
सी के सापेक्ष अनुपस्थित ऑपरेटर
बिटवाइज़ ऑपरेशन, बूलियन लॉजिक और सशर्त (प्रोग्रामिंग) ऑपरेटर:
और | ^ और& || &= |= ^= &&= ||= << >> <<= >>= ?:
पॉज़िक्स बीसी में उपलब्ध नहीं हैं।
बिल्ट-इन फंक्शन्स
sqrt()
वर्गमूल की गणना के लिए कार्य पॉज़िक्स बीसी का एकमात्र अंतर्निहित गणितीय कार्य है। अन्य कार्य बाहरी मानक पुस्तकालय में उपलब्ध हैं।
scale()
सटीकता निर्धारित करने के लिए कार्य (जैसा किscale
चर) इसके तर्क औरlength()
इसके तर्क में महत्वपूर्ण दशमलव अंकों की संख्या निर्धारित करने के लिए कार्य भी अंतर्निहित हैं।
मानक पुस्तकालय कार्य
बीसी की मानक गणित लाइब्रेरी (-एल विकल्प के साथ परिभाषित) में साइन, कोसाइन, आर्कटेंजेंट, प्राकृतिक लॉगरिदम, एक्सपोनेंशियल फ़ंक्शन और दो पैरामीटर बेसेल फ़ंक्शन 'जे' की गणना के लिए फ़ंक्शन शामिल हैं। इनका उपयोग करके अधिकांश मानक गणितीय कार्यों (अन्य व्युत्क्रम त्रिकोणमितीय कार्यों सहित) का निर्माण किया जा सकता है। कई अन्य कार्यों के कार्यान्वयन के लिए बाहरी लिंक देखें।
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 POSIX बीसी के समान है लेकिन एक अतिरिक्त के लिएprint
बयान।
जीएनयू बीसी
जीएनयू बीसी पॉज़िक्स मानक से निकला है और इसमें कई संवर्द्धन शामिल हैं। यह POSIX मानक के dc-आधारित कार्यान्वयन से पूरी तरह से अलग है और इसके बजाय C में लिखा गया है। फिर भी, यह पूरी तरह से पीछे की ओर संगत है क्योंकि सभी POSIX bc प्रोग्राम GNU bc प्रोग्राम के रूप में अपरिवर्तित चलेंगे।
जीएनयू बीसी चर, सरणी और फ़ंक्शन नामों में एक से अधिक वर्ण हो सकते हैं, कुछ और ऑपरेटरों को सी से शामिल किया गया है, और विशेष रूप से, एकif
खंड एक द्वारा पीछा किया जा सकता हैelse
.
आउटपुट या तो जानबूझकर एक चर (POSIX तरीका) की गणना के परिणाम को निर्दिष्ट नहीं करके या जोड़े गए का उपयोग करके प्राप्त किया जाता हैprint
बयान।
इसके अलावा, एread
स्टेटमेंट किसी संख्या के इंटरएक्टिव इनपुट को रनिंग कैलकुलेशन में अनुमति देता है।
सी-शैली टिप्पणियों के अलावा, a#
चरित्र इसके बाद सब कुछ का कारण बनेगा जब तक कि अगली नई-पंक्ति को अनदेखा नहीं किया जाएगा।
अंतिम गणना का मान हमेशा अतिरिक्त बिल्ट-इन में संग्रहीत होता हैlast
चर।
अतिरिक्त ऑपरेटर्स
POSIX बीसी में निम्नलिखित लॉजिकल ऑपरेटर अतिरिक्त हैं:
&& || !
वे सशर्त बयानों में उपयोग के लिए उपलब्ध हैं (जैसे कि एक के भीतरif
बयान)। हालाँकि, ध्यान दें कि अभी भी कोई समतुल्य बिटवाइज़ या असाइनमेंट ऑपरेशन नहीं हैं।
कार्य
जीएनयू बीसी में उपलब्ध सभी कार्य POSIX से विरासत में मिले हैं। GNU वितरण के साथ मानक के रूप में आगे कोई कार्य प्रदान नहीं किया गया है।
उदाहरण कोड
चूंकि ई.पू ^
ऑपरेटर केवल एक पूर्णांक शक्ति को उसके दाईं ओर अनुमति देता है, एक बीसी उपयोगकर्ता द्वारा लिखे जाने वाले पहले कार्यों में से एक फ्लोटिंग-पॉइंट एक्सपोनेंट वाला एक पावर फ़ंक्शन है। नीचे दिए गए दोनों मानते हैं कि मानक पुस्तकालय को शामिल किया गया है:
=== पॉज़िक्स बीसी === में एक पावर फ़ंक्शन <वाक्यविन्यास लैंग = बीसी>
/ * x का पूर्णांक भाग वापस करने के लिए एक फ़ंक्शन * / परिभाषित मैं (एक्स) { ऑटो एस एस = स्केल पैमाना = 0 x /= 1 /* राउंड x डाउन */ स्केल = एस वापसी (एक्स) }
/* इस तथ्य का प्रयोग करें कि x^y == e^(y*log(x)) */ परिभाषित पी (एक्स, वाई) { अगर (वाई == मैं (वाई)) { वापसी (एक्स ^ वाई) } वापसी (ई (वाई * एल (एक्स))) }
</वाक्यविन्यास हाइलाइट>
10000 अंकों तक π की गणना
अंतर्निहित व्युत्क्रम त्रिकोणमितीय फ़ंक्शन फ़ंक्शन का उपयोग करके पाई की गणना करें, a(): <वाक्यविन्यास लैंग = कंसोल हाइलाइट = 3> $ बीसी-एलक्यू पैमाना = 10000 4*a(1) # 1 का अतान 45 डिग्री है, जो रेडियन में pi/4 है।
# इसकी गणना करने में कई मिनट लग सकते हैं।
</वाक्यविन्यास हाइलाइट>
एक अनुवादित सी फ़ंक्शन
चूंकि बीसी का सिंटैक्स सी (प्रोग्रामिंग भाषा) के समान है, सी में लिखे गए प्रकाशित संख्यात्मक कार्यों को अक्सर आसानी से बीसी में अनुवादित किया जा सकता है, जो तुरंत बीसी की मनमानी सटीकता प्रदान करता है। उदाहरण के लिए, जर्नल ऑफ स्टैटिस्टिकल सॉफ्टवेयर (जुलाई 2004, वॉल्यूम 11, अंक 5) में, जॉर्ज मार्सग्लिया ने सामान्य वितरण के लिए निम्नलिखित सी कोड प्रकाशित किया:
<वाक्यविन्यास प्रकाश लैंग = सी> डबल फी (डबल एक्स) {
लंबा डबल s=x,t=0,b=x,q=x*x,i=1; जबकि (एस! = टी) s=(t=s)+(b*=q/(i+=2)); रिटर्न .5+s*exp(-.5*q-.91893853320467274178L);
} </वाक्यविन्यास हाइलाइट>
बीसी के विभिन्न सिंटैक्स को समायोजित करने के लिए कुछ आवश्यक परिवर्तनों के साथ, और यह महसूस करते हुए कि निरंतर 0.9189... वास्तव में लॉग (2 * पीआई)/2 है, इसे निम्नलिखित जीएनयू बीसी कोड में अनुवादित किया जा सकता है:
<वाक्यविन्यास लैंग = बीसी> परिभाषित फाई (एक्स) {
ऑटो एस, टी, बी, क्यू, आई, कास्ट एस = एक्स; टी = 0; बी = एक्स; क्यू = एक्स * एक्स; मैं = 1 जबकि (एस! = टी) s=(t=s)+(b*=q/(i+=2)) const=0.5*l(8*a(1)) # 0.91893... रिटर्न .5+s*e(-.5*q-const)
} </वाक्यविन्यास हाइलाइट>
शेल स्क्रिप्ट्स में बीसी का उपयोग
एक पाइपलाइन (यूनिक्स) के माध्यम से इनपुट के साथ, बीसी का उपयोग गैर-संवादात्मक रूप से किया जा सकता है। यह शेल स्क्रिप्ट के अंदर उपयोगी है। उदाहरण के लिए: <वाक्यविन्यास लैंग = कंसोल> $ परिणाम = $ (इको स्केल = 2; 5 * 7 /3; | बीसी) $ प्रतिध्वनि $ परिणाम 11.66 </वाक्यविन्यास हाइलाइट> इसके विपरीत, ध्यान दें कि बैश (यूनिक्स शेल) केवल पूर्णांक अंकगणित करता है, जैसे: <वाक्यविन्यास लैंग = कंसोल> $ परिणाम = $ ((5 * 7/3)) $ प्रतिध्वनि $ परिणाम 1 1 </वाक्यविन्यास हाइलाइट> कोई भी यहाँ दस्तावेज़ का उपयोग कर सकता है | यहाँ-स्ट्रिंग मुहावरा (बैश, ksh, csh में): <वाक्यविन्यास लैंग = कंसोल> $ बीसी -एल <<< 5*7/3 11.666666666666666666666 </वाक्यविन्यास हाइलाइट>
यह भी देखें
- डीसी (कंप्यूटर प्रोग्राम)
- सी (प्रोग्रामिंग भाषा)
- हॉक (प्रोग्रामिंग भाषा)
संदर्भ
- The Single UNIX Specification, Version 4 from The Open Group : arbitrary-precision arithmetic language – Shell and Utilities Reference,
- GNU bc manual page
- POSIX bc manual page
- Plan 9 Programmer's Manual, Volume 1 –
- 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
बाहरी संबंध
- 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
- ↑ 1.0 1.1 The Single UNIX Specification, Version 4 from The Open Group : arbitrary-precision arithmetic language – Shell and Utilities Reference,