बीसी लॉग और भाज्य गणना का समर्थन नहीं करता है?


17

क्या कोई अन्य कमांड लाइन कैलकुलेटर है जो समर्थन log, n!गणना करता है ? कम से कम bcवह ऐसा नहीं कर सकता, इसने मुझे पार्स त्रुटि बताई

यह सबसे अच्छा है अगर मैं स्क्रिप्ट का उपयोग कर सकता हूं, जैसे echo '5!' | program

जवाबों:


20

bc-lझंडे के साथ आह्वान किए जाने पर प्राकृतिक लघुगणक का समर्थन करता है । आप इसके साथ बेस -10 या बेस -2 लॉग की गणना कर सकते हैं:

$ bc -l
...
l(100)/l(10)
2.00000000000000000000

l(256)/l(2)
8.00000000000000000007

मुझे नहीं लगता कि कोई बिल्ट-इन-फैक्टोरियल है, लेकिन यह खुद को लिखने के लिए काफी आसान है:

$ bc
...
define fact_rec (n) { 
  if (n < 0) {
    print "oops";
    halt;
  }
  if (n < 2) return 1;
  return n*fact_rec(n-1);
}
fact_rec(5)
120

या:

define fact_it (n) {
  if (n < 0) {
    print "oops";
    halt;
  }
  res = 1;
  for (; n > 1; n--) {
    res *= n;
  }
  return res;
}
fact_it(100)
93326215443944152681699238856266700490715968264381621468592963895217\
59999322991560894146397615651828625369792082722375825118521091686400\
0000000000000000000000

POSIX का अनुपालन करने के लिए, आपको इसे लिखना होगा:

define f(n) {
  auto s, m
  if (n <= 0) {
    "Invalid input: "
    n
    return(-1)
  }
  s = scale
  scale = 0
  m = n / 1
  scale = s
  if (n != m) {
    "Invalid input: "
    n
    return(-1)
  }
  if (n < 2) return(1)
  return(n * f(n - 1))
}

वह है: एकल वर्ण फ़ंक्शन नाम, नहीं print, नहीं halt, कोष्ठक आवश्यक नहीं है return(x)। यदि आपको इनपुट सत्यापन की आवश्यकता नहीं है (यहां सकारात्मक पूर्णांक संख्या के लिए), यह सिर्फ है:

define f(n) {
  if (n < 2) return(1)
  return(n * f(n - 1))
}

1
यदि आप इसे ऋणात्मक संख्या या शून्य देते हैं, तो अंतहीन लूप में n == 1 परिणाम की जाँच करना। n <= 1 का उपयोग करें बजाय bc मैन पेज में। वास्तव में, हालांकि, इसे नकारात्मक संख्याओं की त्रुटि वापस करनी चाहिए - en.wikipedia.org/wiki/… के अनुसार, यह फैक्टरियल की गणना करने के लिए पुनरावृत्ति का उपयोग करने के साथ एक ज्ञात समस्या है।
कैस

इसका मतलब फैक्टरियल के सही कार्यान्वयन में एक अध्ययन के रूप में नहीं है, बस यह दिखाने के लिए कि बीसी के पास एक सरल डेमो है, जिसमें पुनरावर्ती कार्य शामिल हैं।
Mat

सच है, लेकिन किसी दिन उस उदाहरण समारोह को पढ़ेंगे और कहेंगे "महान, मैं सोच रहा था कि यह कैसे करना है" और इसका उपयोग करें। BTW, मैं एक गणित geek होने के रूप में दूर के रूप में आप के रूप में किया जा सकता है और अभी भी एक कंप्यूटर geek हो सकता है ... लेकिन जब से मैं एक त्रुटि को ठीक कर रहा था मुझे लगा कि मैं पहले थोड़ा शोध करना बेहतर होगा :)
cas

ठीक है, तुम वहाँ जाओ। सही पुनरावर्ती और पुनरावृत्त संस्करण ...
Mat

बिल्कुल सही नहीं है: 0!=1बस के रूप में 1!=1। कम से कम, कि विकिपीडिया क्या कहता है।
कैस

4

Orpie है कैलकुलेटर और कमांड लाइन के शौकीनों के लिए कैलकुलेटर। यह एक आधुनिक एचपी आरपीएन कैलकुलेटर का अनुकरण करता है, जो निश्चित रूप से गणना करने का एकमात्र सही तरीका है।

यदि आप एक कैलकुलेटर विधर्मी हैं, तो टीआई, कैसियोस पर उठाए गए हैं, और इस तरह, ऑनलाइन कई आरपीएन ट्यूटोरियल हैं जिनके साथ आप अपनी पुन: शिक्षा शुरू कर सकते हैं। एक बार जब आप सोच समझ के आरपीएन वे प्राप्त कर लेते हैं, तो ऑर्पियो मैनुअल अंततः आपके कुछ काम आएगा।

5 की गणना करने के लिए! ओर्पी में, जैसा आप इसे लिखेंगे, वैसे ही टाइप करें 5 !:। आप स्टैक पर पहले Enterपुश करने के लिए उनके बीच दबा सकते हैं 5, लेकिन यह आवश्यक नहीं है।

लॉग 10 (5) की गणना करने के लिए , टाइप करें 5 Enter ' l o Enter। आपको 5इस मामले में पहले स्टैक पर धक्का देना होगा , क्योंकि अगला कीस्ट्रोक ऑपरेटर नहीं है। वह एकल उद्धरण वर्ण कमांड संक्षिप्त नाम मोड में प्रवेश करता है, जो आपको टाइप करना शुरू कर देता है log10, जिसे आप केवल पहले दो वर्णों के साथ पहचान सकते हैं। ( lअकेले आपको lnइसके बजाय प्राकृतिक लॉग फ़ंक्शन मिलता है ।)

किसी भी आरपीएन कैलकुलेटर के साथ, आप थोड़े अभ्यास के साथ, ऑर्पि के साथ वास्तव में तेज़ हो सकते हैं ।

ओर्पी स्टॉक उबंटू रेपो में है। FreeBSD ने इसे बंदरगाहों के रूप में शामिल किया है math/orpie। ओएस एक्स पर, आप इसे होमब्रे के माध्यम से स्थापित कर सकते हैं । तृतीय-पक्ष पैकेज अन्य OSes के लिए उपलब्ध हो सकते हैं। स्रोत से भवन थोड़ा-सा चकोर हो सकता है, क्योंकि यह OCaml में लिखा गया है , और संभवतः आपके पास OCaml विकास स्थापित नहीं है। हालांकि एक सेट प्राप्त करना विशेष रूप से कठिन नहीं है।


2

हमेशा ग्नू ऑक्टेव , कमांड-लाइन कैलकुलेटरों के एमएसीएस (जब आप एक पूर्ण विकास वातावरण चाहते हैं और प्रोग्रामिंग भाषा बिल्ट-इन अपने कैलकुलेटर और हजारों वैकल्पिक ऐड-ऑन चाहते हैं)

या आर यदि आँकड़े अधिक अपने बात कर रहे हैं।

मैं ज्यादातर सिर्फ bc -lमानक गणित पुस्तकालय को लोड करने के लिए उपयोग करता हूं ... मैं भी इसके लिए bcसचेत हूं bc -l। एक फैक्टरियल फ़ंक्शन को परिभाषित करने के बारे में जानकारी के लिए मैट का उत्तर देखें .... हालांकि bcमैन पेज इसे इस प्रकार परिभाषित करता है:

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

यदि आप इसे एक ऋणात्मक संख्या (एक त्रुटि होना चाहिए) या शून्य (वैध) फ़ीड करने के लिए होता है, तो == 1 के बजाय <= 1 के लिए जाँच करना एक अंतहीन लूप को रोकता है।


1

मेरा पसंदीदा हल्का, सरल है W-Calchttp://w-calc.sourceforge.net

आपको मैन्युअल या मैन्युअल रूप से सामान्य कार्यों को देखने की ज़रूरत नहीं है, जैसे आप करते हैं bc- कमांड्स ज्यादातर वही हैं जो आप उम्मीद करेंगे, इसलिए आप जो चाहते हैं उसमें टाइप करें और यह सिर्फ काम करता है। अपने प्रश्न के अनुसार परीक्षण करना - वास्तव में log()और n!उम्मीद के मुताबिक काम करना।

(निश्चित रूप से मैंने ओर्पी के बारे में नहीं सुना है - बहुत अच्छी तरह से एक बेहतर विकल्प हो सकता है।)


0

पूरी तरह से overkill, लेकिन प्रोग्रामिंग भाषा दुभाषियों सब के बाद कमांड लाइन कैलकुलेटर हैं:

$ echo 5 | python -c 'import sys; import math; print math.factorial(int(sys.stdin.readline()));'
120

-1

यदि आपके पास मैक पोर्ट हैं:

$ sudo /opt/local/bin/port install orpie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.