बीसी (प्रोग्रामिंग भाषा)
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (Learn how and when to remove this template message) |
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 |
बीसी, बेसिक कैलकुलेटर (अक्सर बेंच कैलकुलेटर के रूप में जाना जाता है) के लिए, सी (प्रोग्रामिंग लैंग्वेज) के समान सिंटैक्स के साथ एक मनमाना-सटीक अंकगणितीय|आरबिटर-परिशुद्धता कैलकुलेटर भाषा है। बीसी आमतौर पर गणितीय स्क्रिप्टिंग भाषा या एक इंटरैक्टिव गणितीय खोल के रूप में प्रयोग किया जाता है।
सिंहावलोकन
कमांड टाइप करना एक विशिष्ट इंटरएक्टिव उपयोग है bc
एक यूनिक्स कमांड-लाइन इंटरफेस पर # कमांड प्रॉम्प्ट और एक गणितीय अभिव्यक्ति दर्ज करना, जैसे (1 + 3) * 2
, जिसके बाद 8 आउटपुट होगा। जबकि बीसी मनमाने ढंग से सटीकता के साथ काम कर सकता है, यह वास्तव में दशमलव बिंदु के बाद शून्य अंकों के लिए चूक करता है, इसलिए अभिव्यक्ति 2/3
पैदावार 0 (परिणाम काट दिए गए हैं, गोल नहीं)। यह इस तथ्य से अनजान नए बीसी उपयोगकर्ताओं को आश्चर्यचकित कर सकता है। -l
}} बीसी का विकल्प डिफ़ॉल्ट स्केल (दशमलव बिंदु के बाद अंक) को 20 पर सेट करता है और भाषा में कई अतिरिक्त गणितीय कार्य जोड़ता है।
इतिहास
बीसी पहली बार 1975 में यूनिक्स के संस्करण 6 में दिखाई दिया। यह बेल लैब्स के लोरिंडा चेरी द्वारा डीसी (कंप्यूटर प्रोग्राम) के फ्रंट एंड के रूप में लिखा गया था, जो रॉबर्ट मॉरिस (क्रिप्टोग्राफर) और चेरी द्वारा लिखित एक मनमाना-परिशुद्धता कैलकुलेटर है। डीसी ने रिवर्स पोलिश नोटेशन में निर्दिष्ट मनमाना-सटीक संगणनाएँ कीं। बीसी ने एक साधारण संकलक (कोड की कुछ सौ पंक्तियों वाली एक एकल yacc स्रोत फ़ाइल) के माध्यम से समान क्षमता के लिए एक पारंपरिक प्रोग्रामिंग-भाषा इंटरफ़ेस प्रदान किया, जिसने सी (प्रोग्रामिंग भाषा)-जैसे सिंटैक्स को डीसी नोटेशन और पाइपलाइन (यूनिक्स) में परिवर्तित कर दिया। परिणाम डीसी के माध्यम से
1991 में, POSIX ने सख्ती से परिभाषित और मानकीकृत bc. इस मानक के तीन कार्यान्वयन आज भी मौजूद हैं: पहला पारंपरिक यूनिक्स कार्यान्वयन है, जो डीसी के लिए एक फ्रंट-एंड है, जो बेल लैब्स सिस्टम से यूनिक्स और प्लान 9 में जीवित है। दूसरा मुफ्त सॉफ्टवेयर जीएनयू बीसी है, जिसे पहली बार 1991 में फिलिप ए. नेल्सन द्वारा जारी किया गया था। GNU कार्यान्वयन में POSIX मानक से परे कई एक्सटेंशन हैं और यह अब dc का फ्रंट-एंड नहीं है (यह एक बायटेकोड दुभाषिया है)। तीसरा 2003 में OpenBSD द्वारा पुन: कार्यान्वयन है।
कार्यान्वयन
पॉज़िक्स बीसी
POSIX मानकीकृत बीसी भाषा पारंपरिक रूप से डीसी (कंप्यूटर प्रोग्राम) प्रोग्रामिंग भाषा में एक प्रोग्राम के रूप में लिखी जाती है, जो डीसी भाषा की सुविधाओं के लिए डीसी के संक्षिप्त सिंटैक्स की जटिलताओं के बिना उच्च स्तर की पहुंच प्रदान करती है।
इस रूप में, बीसी भाषा में एकल-अक्षर चर (प्रोग्रामिंग), सरणी डेटा संरचना और फ़ंक्शन (प्रोग्रामिंग) नाम और अधिकांश मानक अंकगणितीय ऑपरेटर, साथ ही साथ परिचित नियंत्रण-प्रवाह निर्माण (if(cond)...
, while(cond)...
तथा for(init;cond;inc)...
) सी से। सी के विपरीत, एif
क्लॉज का पालन ए द्वारा नहीं किया जा सकता हैelse
.
कार्यों को a का उपयोग करके परिभाषित किया गया हैdefine
कीवर्ड, और मान उनसे a का उपयोग करके वापस किए जाते हैं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 बिटवाइज़ एक्सक्लूसिव-या ऑपरेटर्स से मिलते जुलते हैं, लेकिन वास्तव में bc पूर्णांक घातांक ऑपरेटर हैं।
विशेष रूप से ध्यान दें, का उपयोग ^
नकारात्मक संख्या वाला ऑपरेटर सी ऑपरेटर प्राथमिकता का पालन नहीं करता है। -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 </वाक्यविन्यास हाइलाइट>
यह भी देखें
- डीसी (कंप्यूटर प्रोग्राम)
- सी (प्रोग्रामिंग भाषा)
- हॉक (प्रोग्रामिंग भाषा)
संदर्भ
- ↑ 1.0 1.1 The Single UNIX Specification, Version 4 from The Open Group : arbitrary-precision arithmetic language – Shell and Utilities Reference,
- 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