বাশ বা অন্যান্য ভাষা / ফ্রেমওয়ার্কগুলিতে কীভাবে পূর্ণসংখ্যা এবং ভাসমান গণনা করবেন?


294

echo "20+5"আক্ষরিক ব্যবহার " 20+5" পাঠ্য তৈরি করে ।

25এই ক্ষেত্রে সংখ্যার যোগফল পেতে আমি কোন আদেশ ব্যবহার করতে পারি ?

এছাড়াও, ভাসমান পয়েন্টের জন্য ব্যাশ ব্যবহার করে এটি করার সহজতম উপায় কী? উদাহরণস্বরূপ, echo $((3224/3807.0))প্রিন্টগুলি 0:(।

আমি নিজেই বেসিক কমান্ড শেল ('কমান্ড লাইন') ব্যবহার করে বা কমান্ড লাইন থেকে উপলভ্য ভাষাগুলি ব্যবহার করে উত্তরগুলির সন্ধান করছি।


1
আপনি যদি সাথে যাচ্ছেন তবে ম্যান পৃষ্ঠায় bcথাকা -lবিকল্পটি সম্পর্কে পড়তে আপনার পক্ষে উপযুক্ত।
গ্লেন জ্যাকম্যান

আমি ধরে নিই যে লেখক বাশ কমান্ড লাইনের জন্য জিজ্ঞাসা করছেন, যখন উত্তরগুলি সমস্ত ধরণের স্ক্রিপ্টিং ভাষায় বৈচিত্র্য দেয়।
zinking

2
ম্যান বাশ → / অভিব্যক্তি
4

1
@ জিংকিং ওয়েল, বাশকে সহজেই সংখ্যক অন্যান্য স্ক্রিপ্টিং ভাষার জন্য অনুবাদকদের সহজেই অনুরোধ করতে সক্ষম করার জন্য ডিজাইন করা হয়েছে।
র্যান্ডম 832

ভাসমান পয়েন্ট ফলাফলের সাথে বাশ পূর্ণসংখ্যা বিভাগ পড়ান
সাইরাস

উত্তর:


399

অপশন প্রচুর আছে !!!

সারাংশ

$ printf %.10f\\n "$((10**9 * 20/7))e-9"   # many shells. Not mksh.
$ echo "$((20.0/7))"                       # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc 
$ echo 4 k 20 5 2 / + p | dc 
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3 
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl

বিস্তারিত

শেল

আপনি পূর্ণসংখ্যার গাণিতিকের জন্য পসিক্স গণিতের সম্প্রসারণ ব্যবহার করতে পারেন echo "$((...))":

$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22

বেশ পোর্টেবল ( ash dash yash bash ksh93 lksh zsh):
ফ্ল্যাটগুলি মুদ্রণের জন্য প্রিন্টফ ক্ষমতা ব্যবহার করে আমরা সীমাবদ্ধ পরিসরের (10 টির বেশি সংখ্যার বেশি নয়) ভাসমান পয়েন্ট গণিত করতে বেশিরভাগ শেল প্রসারিত করতে পারি:

$ printf %.10f\\n "$((1000000000 *   20/7  ))e-9"
2.8571428570

ksh93, yashএবং zshএখানে সমর্থন ভাসা:

$ echo "$((1.2 / 3))"
0.4

কেবল ksh93(সরাসরি) এবং zshএখানে লাইব্রেরি ম্যাথফুঙ্ক লোড হচ্ছে:

$ echo "$((4*atan(1)))"
3.14159265358979324

( মত ফাংশন পেতে zshলোড zmodload zsh/mathfuncকরা প্রয়োজন atan)।


ইন্টারেক্টিভ zsh সঙ্গে:

$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17

(টি) সিএসএস (কেবল পূর্ণসংখ্যা) সহ:

% @ a=25 / 3; echo $a
8

ইন rcশেল পরিবার, akangaগাণিতিক প্রসারের এগুলির মধ্যে একটি:

; echo $:25/3
8

পসিক্স টুলসেষ্ট

bc(ইন্টারেক্টিভ মোডের জন্য নীচে দেখুন), ম্যানুয়ালটি এখানে

স্মৃতিসম্বন্ধীয়: bহল calculator (যদিও bজন্য আসলে মৌলিক )।

$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000

(নির্বিচারে নির্ভুলতা সংখ্যা সমর্থন করে)


বিসি ইন্টারেক্টিভ মোড:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
5+5
10

2.2+3.3
5.5

রাশ এর সমাধান, expr(কোনও ইন্টারেক্টিভ মোড নেই):

$ expr 20 + 5
25
$ expr 20 + 5 / 2
22

জোশুয়ার সমাধান : awk(কোনও ইন্টারেক্টিভ মোড নেই):

$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333

অন্যান্য কম-বেশি বহনযোগ্য সরঞ্জাম

আর্জের সমাধান, dc(ইন্টারেক্টিভ মোড dc:):

এটি আরও মজাদার যেহেতু এটি বিপরীত পলিশ স্বরলিপি দ্বারা কাজ করে।

$ echo 20 5 2 / + p | dc 
22
$ echo 4 k 20 5 2 / + p | dc 
22.5000

আপনি যতটা বিপরীত পলিশ স্বরলিপি দিয়ে কাজ না করেন ততক্ষণ ব্যবহারিক না।

নোট করুন যে পূর্বে রয়েছে এবং dchistor তিহাসিকভাবে চারপাশে মোড়ক হিসাবে প্রয়োগ করা হয়েছে তবে পসিক্স দ্বারা মানক করা হয়নিbcbcdcdc


DQdims এর calc(প্রয়োজনীয় sudo apt-get install apcalc):

$ calc 2 + 4
6

সাধারণ উদ্দেশ্য ভাষার দোভাষী:

manatwork এর সমাধান, node(ইন্টারেক্টিভ মোড :;node আউটপুট ফাংশন প্রয়োজন হয় না):

$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5

পার্ল (ইন্টারেক্টিভ মোড perl -de 1:):

$ perl -E "say 20+5/2"
22.5

পাইথন (ইন্টারেক্টিভ মোড :;python আউটপুট ফাংশন প্রয়োজন হয় না):

$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5

নির্বিচারে নির্ভুলতা সংখ্যাগুলি সমর্থন করে:

$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184

আপনি যদি clispইনস্টল করে থাকেন তবে আপনি পোলিশ স্বরলিপিটিও ব্যবহার করতে পারেন:

$ clisp -x "(+ 2 2)"

মার্কোর সমাধান, lua(ইন্টারেক্টিভ মোড lua:):

$ lua -e "print(20+5/2)"
22.5

পিএইচপি (ইন্টারেক্টিভ মোড php -a:):

$ php -r 'echo 20+5/2;'
22.5

রুবি (ইন্টারেক্টিভ মোড :;irb আউটপুট ফাংশন প্রয়োজন হয় না):

$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5

গুইল (ইন্টারেক্টিভ মোড guile:):

$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5

এস-ল্যাং (ইন্টারেক্টিভ মোড :;slsh আউটপুট ফাংশন প্রয়োজন নেই, কেবল একটি ;টার্মিনেটর):

$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000

টিসিএল (ইন্টারেক্টিভ মোড :;tclsh আউটপুট ফাংশন প্রয়োজন হয় না, তবে expr):

$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5

জাভাস্ক্রিপ্ট শেল:

$ smjs
js> 25/3
8.333333333333334
js>

$ jspl
JSC: 25/3

RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...

$ node
> 25/3
8.333333333333334
>

বিভিন্ন এসকিউএল এর:

এসকিউএলাইট (ইন্টারেক্টিভ মোড sqlite3:):

$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5

মাইএসকিউএল :

mysql -BNe 'select 1+1'

পোস্টগ্র্যাস এসকিউএল :

psql -tAc 'select 1+1

_ মাইএসকিএল এবং পোস্টগ্র্যাসে বিকল্পগুলি 'এসকিআই আর্ট' চিত্রটি বন্ধ করে দেয়!

বিশেষিত গণিতমুখী ভাষা:

প্লেইন মোডে আর - 1000 সাধারণ এলোমেলো সংখ্যা উত্পন্ন করতে দেয় এবং মানক বিচ্যুতি পেতে এবং এটি মুদ্রণ করতে দেয়

$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997

আর লিটার স্ক্রিপ্ট ব্যবহার করে - পাই স্কোয়ার মুদ্রণ করতে দেয়

$ r -e 'cat(pi^2, "\n")'
9.869604
$  r -e 'print(sum(1:100))'
[1] 5050

নম্বর তত্ত্ব, লিনিয়ার বীজগণিত এবং আরও অনেক কিছুর জন্য বিস্তৃত কম্পিউটার বীজগণিত সিস্টেম PARI / GP

$ echo "prime(1000)"|gp -q
7919                        // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3]                       // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15                          // 1+2+3+4+5

জিএনইউ অষ্টাভে (একটি উচ্চ-স্তরের ব্যাখ্যার ভাষা, মূলত সংখ্যাসূচক গণনার জন্য উদ্দিষ্ট)

জটিল সংখ্যাগুলি সমর্থন করে:

$ octave
>> 1.2 / 7
ans =  0.17143
>> sqrt(-1)
ans =  0 + 1i

জুলিয়া , উচ্চ-পারফরম্যান্সের ভাষা এবং বৈজ্ঞানিক ও সংখ্যাগত কম্পিউটিংয়ের দোভাষী pre

অ-ইন্টারেক্টিভ বিকল্প:

$ julia -E '2.5+3.7'
6.2

3
এবং বিসি আকর্ষণীয়: whatis bc-> An arbitrary precision calculator language আকর্ষণীয়! ধন্যবাদ!
মাইকেল ডুরান্ট

@ মিশেলডুরান্ট আপনি কি আপনার সম্পাদনাগুলি পুনরায় সংশোধন করতে পারবেন, আমি অবশ্যই ভুল করে প্রত্যাখ্যান করতে পারি?
lgarzo

4
এটি আরও রয়েছে dc, যেহেতু এটি আরও বেশি মজাদার কারণ এটি বিপরীত পলিশ স্বরলিপি দ্বারা কাজ করে। echo 20 5 + p | dc আপনি যতটা না বিপরীতমুখী পোলিশ স্বরলিপি দিয়ে কাজ না করেন ততক্ষণ ব্যবহারিক না।
আরেজেজ

2
বিসি পদ্ধতির পরিবর্তনের হিসাবে আমি আমার .bashrc ফাইলটিতে নিম্নলিখিত ফাংশনটি (যা আমি কোথাও স্ট্যাকেক্সচেঞ্জে পেয়েছি) যুক্ত করেছি। আমি কেবল 2 + ​​3 ক্যালক প্রবেশ করতে পারি এবং 5 পেতে পারি ## Command line calculator calc () { bc -l <<< "$@" }
জো

1
@ ক্রিস, মাছ একটি চলন্ত লক্ষ্য। তারা mathকথা বলার সাথে সাথে তাদের নতুন বিল্টিনে (বা এটি এখন যা বলা হয়) নিয়ে কাজ করছে । সম্পাদনা করতে নির্দ্বিধায়। এটি আমার উত্তর নয় এবং এটি সম্প্রদায়ের উইকি।
স্টাফেন চেজেলাস

35

গণনা করার অনেকগুলি উপায় রয়েছে। সাধারণ প্রকাশের জন্য আপনি bashনিজেই ব্যবহার করতে পারেন :

echo $((20+5))

বা expr:

expr 20 + 5

এবং জটিল ক্ষেত্রে জন্য দুর্দান্ত সরঞ্জাম রয়েছে bc:

echo "20+5" | bc

বিটিডব্লিউ, বিসি শিকড়, লগারিদম, কোস, পাপ এবং আরও অনেক কিছু দিয়ে খুব জটিল অভিব্যক্তি গণনা করতে পারে।


আমি আপনার exprবিকল্পটি গ্রহণযোগ্য উত্তরে যুক্ত করেছি। গ্রহণ এবং কেন্দ্রীভূত করার জন্য একটি বাছাই করতে হয়েছিল।
মাইকেল ডুরান্ট

3
আপনি মৃত্যুদণ্ড কার্যকর করার চেষ্টা করছেন expr 20+5। আপনি এটি কাজ করা সংখ্যা এবং প্লাস মধ্যে শূণ্যস্থান টাইপ করা প্রয়োজন: expr 20 + 5। এটা জরুরি.
ভিড়ের

24

উল্লিখিত সমাধানগুলি খুব সাধারণ গণনার জন্য সূক্ষ্ম, তবে খুব ত্রুটিযুক্ত। উদাহরণ:

# without spaces expr 20+5 produces literally 20+5
expr 20+5
 20+5

# bc's result doesn't give the fractional part by default
bc <<< 9.0/2.0
 4

# expr does only integer
expr 9 / 2
 4

# same for POSIX arithmetic expansion
echo $((9/2))
 4

# bash arithmetic expansion chokes on floats
echo $((9.0/2.0))
 bash: 9/2.0: syntax error: invalid arithmetic operator (error token is ".0")

# Most `expr` implementations also have problems with floats
expr 9.0 / 2.0
 expr: non-integer argument

শেষের মতো সিন্ট্যাক্স ত্রুটিটি সহজেই লক্ষ্য করা যায় তবে ফেলে দেওয়া ফ্লোট অংশের সাথে পূর্ণসংখ্যার প্রতিক্রিয়াগুলি সহজেই নজরে না যায় এবং ভুল ফলাফল হতে পারে।

এজন্য আমি সর্বদা লুয়ার মতো স্ক্রিপ্টিং ভাষা ব্যবহার করি। তবে আপনি যে কোনও স্ক্রিপ্টিং ভাষার সাথে পরিচিত তা চয়ন করতে পারেন। আমি কেবল উদাহরণ হিসাবে লুয়া ব্যবহার করি। সুবিধাগুলি হ'ল

  • একটি পরিচিত বাক্য গঠন
  • পরিচিত ফাংশন
  • পরিচিত সাবধান
  • নমনীয় ইনপুট
  • স্পেসগুলি সাধারণত কিছু যায় আসে না
  • ভাসমান পয়েন্ট আউটপুট

উদাহরণ:

lua -e "print(9/2)"
 4.5

lua -e "print(9 / 2)"
 4.5

lua -e "print(9.0/2)"
 4.5

lua -e "print (9 /2.)"
 4.5

lua -e "print(math.sqrt(9))"
 3

2
bcফলাফলটি পূর্ণসংখ্যার নয়, কেবলমাত্র গোলাকার scale, কার ডিফল্ট মান 0 হয় bc <<< 'scale=4;9.0/2.0'the সুতরাং আপনি যদি ভগ্নাংশটি চান want
manatwork

সংশোধনীর জন্য ধন্যবাদ. কিন্তু তবুও, এটি ত্রুটিযুক্ত। আমি scaleযদি bcকয়েক সপ্তাহ ব্যবহার করি তবে আমি কি যুক্ত করব ? সম্ভবত না. এমনকি এটি স্থায়ীভাবে পরিবর্তনের কোনও উপায় থাকলেও আপনি যদি ডিফল্ট সেটিংস সহ কোনও সিস্টেমে থাকেন তবে তা আপনাকে কামড়ায়।
মার্কো

3
কয়েক বছর আগে প্রথমবার scaleদেখা হওয়ার পরে ব্যক্তিগতভাবে আমার মনে নেই bc। কিন্তু আমি সবসময় ভুলে গেছি কিনা আউটপুট ফাংশনে luaহয় putবা puts। ;)
manatwork

স্ক্রিপ্টিং ভাষার একটি হিসাবে স্রেফ বিসি গণনা করুন। আমি সবসময় জানি যে আমার পূর্ণসংখ্যার ফলাফলগুলি দরকার বা না - পূর্ণসংখ্যা ঠিক থাকলে আমি ব্যাশে থাকি, অন্যথায় আমার কাছে খুব কমই বিসি ব্যবহার করার কারণ রয়েছে। লুয়ার জন্য, আপনাকে মনে রাখতে হবে -, মুদ্রণ এবং প্রথম বন্ধনী।
ব্যবহারকারী অজানা

7
bc -lপ্লেইন না করে কেবল সর্বদা ব্যবহার করুন bc, তারপরে কখনই চিন্তা করবেন না scale
ডালার

23

কেউ এখনও বিশ্রী উল্লেখ করেনি?

পসিক্স শেল ফাংশন এবং অ্যাডকে গণিত শক্তি ব্যবহার করে কেবল এই (এক লাইন) ফাংশনটি সংজ্ঞায়িত করুন:

calc(){ awk "BEGIN { print $*}"; }

তারপরে কেবল calc 1+1বা এর মতো জিনিসগুলি কার্যকর করুনcalc 5/2

দ্রষ্টব্য: ফাংশনটি সর্বদা উপলভ্য করতে, এটি ~ / .bashrc এ যুক্ত করুন (বা আপনার সংশ্লিষ্ট শেলের প্রারম্ভিকরণ ফাইল)

অবশ্যই, "ক্যালক" নামে একটি ছোট স্ক্রিপ্ট নিম্নলিখিত বিষয়বস্তু সহ:

#!/bin/sh -
awk "BEGIN { print $* }"

কাজ করতে পারে।


2
বাহ এটি সর্বোত্তম, এমনকি ফ্লোটকে সমর্থন করে। এটি কিছু ইনস্টল না করেই কাজ করে!
সিএমসিডিগ্রাগনকাই

1
খুব সুন্দর, আমি একটি ভাসমান তুলনা করতে চাই, আপনার সহায়তায় আমি এটি কীভাবে করেছি:a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
পল টোবিয়াস

18

আপনি ব্যবহার করতে পারে bc। যেমন,

$ echo "25 + 5" | bc
30

বিকল্পভাবে bc <<< 25+5কাজ করবে।

বা ইন্টারেক্টিভভাবে, আপনি যদি কেবল একটি সাধারণ গণনার চেয়ে আরও কিছু করতে চান:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
25 + 5
30

bcপ্রিন্টগুলির GNU বাস্তবায়ন যখন শিরোনামে / শিরোনামের তথ্যগুলি যখন স্ট্যান্ডিন এবং স্টাডআউট উভয়ই টার্মিনালে যায়। আপনি এটি (জিএনইউ-নির্দিষ্ট) -qবিকল্প দিয়ে দমন করতে পারেন । আরও তথ্যের জন্য বিসি ম্যান পৃষ্ঠাটি দেখুন


1
পাইপ ("|") উভয়ের জন্য +1 এবং বিএসের জন্য ইন্টারেক্টিভ মোড বিকল্পগুলি। এক ctrl-dপ্রস্থান করতে হবে?
মাইকেল ডুরান্ট

1
@ মিশেলডুরান্ট হ্যাঁ, will ডি ইচ্ছা মত কৌশলটি quit
সম্পাদন

c () { bc -l <<< "$@" } c দ্রুত এবং সহজে ব্যবহারের জন্য একটি ফাংশন সংজ্ঞায়িত করবে । যেমন c 3/2আপনাকে দেবে 1.50000000000000000000। কীভাবে এটি করতে হবে তা বর্ণনা করার উপরের লিঙ্কটি মৃত।
আইজোসেফ

1
@ লাইভ ম্যান পেজ লিঙ্কটি এখনও কাজ করে। তবে, লিঙ্ক: paweng.com/2008/08/15/unix-command-line-calculator , যা আপনি "এই" বাক্যটিতে "এটি" টার্গেট হিসাবে সরবরাহ করেন "এই পৃষ্ঠায় এটি কীভাবে একটি উপকরণ সেটআপ করতে হবে" ... প্রদর্শিত হবে মৃত.
আইজোসেফ

1
@ আইজোসেফ ধন্যবাদ .. আমি year বছরের পুরানো লিঙ্কটির রেফারেন্সটি সরিয়ে দিয়েছি (আশা করি লিঙ্কগুলি আমার ব্রাউজারে আরও স্পষ্টভাবে প্রকাশিত হত - গতকাল দেখার সময় এমনকি এটিও দেখেনি)
লেভন

16

আপনি ব্যবহার করতে পারেন calc:

আপনি যদি calcঅন্য কোনও যুক্তি না দিয়ে প্রবেশ করেন তবে এটি একটি ইন্টারেক্টিভ মোডে প্রবেশ করে যেখানে আপনি কেবল গণিত করা চালিয়ে যেতে পারেন। আপনি প্রস্থান টাইপ করে এটিকে প্রস্থান করুন:

C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit

অথবা আপনি এটি একটি যুক্তি হিসাবে প্রকাশের সাথে ব্যবহার করুন এবং এটি উত্তর সরবরাহ করবে এবং তারপরে প্রস্থান করবে

$calc 2 + 4
    6
$

calcঅনুরূপ bc, এটি ঠিক যেমন ডিফল্ট হিসাবে ভাল আচরণ করে like


1
আপনার বিশেষভাবে না চাইলে আপনার ইন্টারেক্টিভ মোডে প্রবেশের দরকার নেই, যেমন: calc -e '2+4; 3+5; 3.4+5; 2^44 আউটপুট লাইনগুলি প্রিন্ট করুন বা কেবল calc -e 33+(3^3).. +1 আমি একটি ক্যালকুলেটরের জন্য 'ক্যালক' বলে কিছু ব্যবহার করার ধারণা পছন্দ করি :)
পিটার.ও

1
আমি শুধু উপলব্ধি করেছি যে -eবিকল্প প্রয়োজন নেই যখন শুধুমাত্র একটি অভিব্যক্তি ... হয় ঝরঝরে ..!
Peter.O

10

আমি পাইথন ছড়িয়ে দিতে এবং এটি একটি ইন্টারেক্টিভ ক্যালকুলেটর হিসাবে ব্যবহার করতে চাই (তবে তারপরে আবার আমি পাইথন প্রোগ্রামার)।


আমিও! পাইথন হ'ল আমার সুইস সেনা ছুরি
লেভন

screenপাইথন চালাতে আমার সর্বদা একটি উইন্ডো থাকে ।
আর্জেজ

1
পাইথনপি ( github.com/russell91/pythonpy ) একটি ইন্টারেক্টিভ শেল নিক্ষেপ না করে পাইথন সিনট্যাক্সে এটি এবং অন্যান্য জিনিসগুলি করার একটি দুর্দান্ত উপায়: py '3.2 * 5' => 16
রাসেলস্টার্ট

আমি অজগর পছন্দ করি তবে এটি শুরু হওয়া সময়টি গুরুত্বপূর্ণ হয়ে ওঠে যদি আপনি কেবল আপনার
ব্যাশের

@ এন্ডমিউ আমি "ইন্টারেক্টিভ" ক্যালকুলেটর বলেছি। যদিও এটিও লক্ষণীয় যে আপনি যদি কোনও স্ক্রিপ্টে জটিল পর্যাপ্ত কিছু কাজ করে থাকেন তবে বিচক্ষণতা আপনাকে বাশ ছাড়া অন্য কিছু ব্যবহার করার নির্দেশ দেয় (পাইথনের মতো)।
asmeurer

10

যেহেতু অন্য কারও এটি উল্লেখ করা হয়নি, এবং যদিও এটি কঠোরভাবে কোনও গণক নয় (তবে এই সমস্ত সাধারণ উদ্দেশ্যে স্ক্রিপ্টিং ভাষাও নয়), আমি উল্লেখ করতে চাই units:

$ units "1 + 1"
        Definition: 2
$ units "1 lb" "kg"
        * 0.45359237
         / 2.2046226

অথবা, কম আউটপুট দেওয়ার জন্য যাতে আপনি কোনও $()কিছু বরাদ্দ করতে কেবলমাত্র নম্বরটি পেতে পারেন :

$ units -t "1 + 1"
2
$ units -t "1 lb" "kg"
0.4539237

এমনকি এটি তাপমাত্রার রূপান্তরও করে

$ units -t "tempC(20)" "tempF"
68

আরও গণনার জন্য একটি অভিব্যক্তিতে তাপমাত্রা রূপান্তর পেতে, এটি করুন:

$ units -t "~tempF(tempC(20))+1"
68.1

অনেকগুলি অপশন রয়েছে যার জন্য অতিরিক্ত প্রোগ্রাম ইনস্টল করার প্রয়োজন নেই যে আমি কেন দেখছি না যে কেন সেই পথে যেতে চান।
এনডেমো

@ এন্ডমো এটি কিছু বিতরণে ডিফল্টরূপে ইনস্টল করা আছে ... এবং এই অন্যান্য উত্তরগুলির অনেকগুলি তা নয়। এবং আপনার কি পাঁচ বছরের পুরানো উত্তরটির বিষয়ে মন্তব্য করতে হবে?
র্যান্ডম 832

1
আমি মনে করি যে আমি কম ভোট দিলে মন্তব্য করা ভাল এবং এটি এমন একটি অনুশীলন যা এসই দ্বারাও উত্সাহিত হয়েছিল আমি পাঁচ বছর কেন প্রাসঙ্গিক তা দেখতে পাচ্ছি না। একই মন্তব্য সমস্ত অনুরূপ উত্তরের ক্ষেত্রে প্রযোজ্য - ব্যক্তিগত কিছুই নয়। (বিটিডাব্লিউ এমনকি সর্বাধিক অস্পষ্ট প্রোগ্রামও কিছু বিতরণে ডিফল্টরূপে ইনস্টল করা যেতে পারে
this এক্ষেত্রে আমি দেবিয়ান

6
$> ghc -e '20 + 5'
25
it :: Integer

এছাড়াও ghci, এটি ইন্টারেক্টিভ মোডে গ্লাসগো-হাস্কেল সংকলক ( ghc --interactiveএটির সাথে একটি অভিব্যক্তি মূল্যায়নের বিপরীতে -e), একটি আকর্ষণীয় "ক্যালকুলেটর" তৈরি করে:

$>ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> pi
3.141592653589793
Prelude> ceiling pi
4
Prelude> compare 1 2
LT

3
ghcগ্লাসগো হাস্কেল কম্পাইলার এর অর্থ কি ?
manatwork

প্রোগ্রাম ইনস্টল করা আমার ইনস্টল করা প্রয়োজন কিন্তু thx।
মাইকেল ডুরান্ট

4

আমি "জাভাস্ক্রিপ্টের শক্তি" পড়তে বিশ্বাস করতে পারি না (তবে অবশ্যই পার্ল অবশ্যই ব্যতীত অন্যান্য অংশগুলির উত্তরটি আমাকে উচ্চতর করতে হয়েছিল।

ব্যবহারিকভাবে, সরল ক্ষেত্রে যেখানে পূর্ণসংখ্যার গাণিতিক যথেষ্ট, আমি বিল্টিন use ((...)) ব্যবহার করি এবং এটির সুপারিশ করি। অন্যথায়, প্রায় সব ক্ষেত্রেই "..." প্রতিধ্বনিত হয় বিসি যথেষ্ট।

কিছু গাণিতিক ক্রিয়াকলাপের জন্য যেমন পরিসংখ্যান, ম্যাট্রিক্স অপারেশন এবং আরও Rঅনেক ভাল সরঞ্জাম:

echo 25 + 5 | R --vanilla

এবং ছোট ডেটাসেট এবং গ্রাফিকাল থ্রো ফলাফলের জন্য, oocalcএকটি দুর্দান্ত ইউটিলিটি।


4

আমি একটি অজগর স্ক্রিপ্ট ব্যবহার করি যা একটি অজগর অভিব্যক্তি মূল্যায়ন করবে এবং ফলাফলটি মুদ্রণ করবে, তারপরে আমি এর মতো কিছু চালাতে পারি

$ pc '[i ** 2 for i in range(10)]'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

লিপিটি হ'ল:

#!/usr/local/bin/python3

import sys
import traceback
from codeop import CommandCompiler

compile = CommandCompiler()
filename = "<input>"
source = ' '.join(sys.argv[1:]) + '\n'

try:
    code = compile(source, filename) 
except (OverflowError, SyntaxError, ValueError):
    type, value, sys.last_traceback = sys.exc_info()
    sys.last_type = type
    sys.last_value = value
    if filename and type is SyntaxError:
        # Work hard to stuff the correct filename in the exception
        try:
            msg, (dummy_filename, lineno, offset, line) = value.args
        except ValueError:
            # Not the format we expect; leave it alone
            pass
        else:
            # Stuff in the right filename
            value = SyntaxError(msg, (filename, lineno, offset, line))
            sys.last_value = value
    lines = traceback.format_exception_only(type, value)
    print(''.join(lines))
else:
    if code:
        exec(code)
    else:
        print('incomplete')

দুর্ভাগ্যক্রমে আমি মনে করি না যে আমি কোডটি বেশিরভাগ থেকে ধার করেছি, তাই আমি এটি উদ্ধৃত করতে পারি না।


না print(eval(' '.join(sys.argv[1:])))একই জিনিস করে?
জি.রোকট

আপনি এখানে একটি মাছি আঘাত করতে একটি হাতুড়ি ব্যবহার করছেন
nddou

4

Gnuplot

gnuplot - একটি ইন্টারেক্টিভ প্লটিং প্রোগ্রাম
উপরের লিঙ্কটি অনুসরণ করুন বাgnuplotপ্রম্পটটিটাইপকরুন তারপরে gnuplot ইন্টারপ্রেটারেরhelpভিতরে। Gnuplot ডেটা প্লট করার জন্য জন্মগ্রহণ করা একটি প্রোগ্রাম, তবে এটি গণনার জন্যও ব্যবহার করা যেতে পারে। এটি এমন সুবিধা দেয় যা আপনি ফাংশনগুলি সংজ্ঞায়িত করতে পারেন বা বিল্ট-ইনগুলি ব্যবহার করতে পারেন।

echo  "pr 20+5/2"  |  gnuplot          #  Lazy-note `pr` instead of print
22                                     #  Integer calculation & result
echo  "pr 20.+5/2"  |  gnuplot         #  Lazy-note `pr` instead of print
22.0                                   #  Floating point result
echo  "pr sin(2*pi/3.)"  |  gnuplot    #  Some functions ...
0.866025403784439

রুট (বা অন্য কোনও সি দোভাষী )

Root পরিচয়ে সিস্টেমে সব খুব দক্ষ ভাবে হ্যান্ডেল এবং বিপুল পরিমাণ ডেটা বিশ্লেষণ করার জন্য কার্যকারিতা সঙ্গে OO যেমন পণ্য অবকাঠামো একটি সেট প্রদান করে ...

আপনি এটিকে সি ইন্টারপ্রেটার , সিআইএনটি হিসাবে ব্যবহার করতে পারেন বা আপনি অনেক অনেক সি ইন্টারপ্রেটার ব্যবহার করতে পারেন । আইএমএইচও, এটি বিশাল, জটিল, শক্তিশালী, এবং সর্বদা বন্ধুত্বপূর্ণ নয় তবে এটিও বড় তৃপ্তি দিতে পারে।

আপনি যদি সত্যিই আপনার অভ্যন্তরের সেই ছোট্ট কণ্ঠ শুনতে চান না যা কনফুসিওকে উদ্ধৃত করে এবং আপনি চাকাটিতে একটি (মাখন) উড়ে যাওয়ার জন্য প্রস্তুত থাকেন তবে আপনি রুটটি ব্যবহার করতে পারেন । এই ক্ষেত্রে -lস্প্ল্যাশ স্ক্রিন প্রদর্শন এড়াতে বাধ্যতামূলক ...

echo  "20+5/2"   | root -l
(const int)22
echo  "20+5/2."  | root -l
(const double)2.25000000000000000e+01

echo  "cout<< 20+5/2 << endl;"   | root -l
22

4

পূর্ণসংখ্যার গাণিতিক (যেখানে 3/2 = 1)

  • bash echo $(( 1+1 ))
  • fish math 1+1
  • zsh* echo $((1+1))

*: এবং ksh93, যশ

ভাসমান পয়েন্ট গণিতের জন্য (যেখানে 3/2 = 1.5)

  • bash awk "BEGIN {print 10/3}" (কম নির্ভুলতা)
  • bash echo "10/3"|bc -l (উচ্চ নির্ভুলতা)
  • fish math -s4 10/3
  • zsh* echo $((10./3))

*: এবং ksh93, যশ

আপনি অবশ্যই সর্বনিম্ন টাইপিংয়ের সাথে জাজি ব্যবহার করতে আপনার শেলটি কনফিগার করতে পারেন calc 10/3(বাশ 1 এবং ফিশ 2 এর জন্য এটি কীভাবে করা যায় তার নোট দেখুন )।

ব্যাশের জন্য অ্যাডকের পরামর্শ দেওয়ার মূল কারণ হ'ল এটি প্রায় সব ইউনিক্স-এর মতো ওএসের উপর ইনস্টল করা আছে এবং যথাযথভাবে হালকা (অবশ্যই কোনও প্রক্রিয়া শুরু করার জন্য ব্যয় হয়) কম সুনির্দিষ্ট তবে বেশি মানব-বান্ধব আউটপুট bc -lযা 20 দশমিক ছাপায় অঙ্কগুলি (যদিও আপনি আরও দশমিক সংখ্যা পাওয়ার জন্য অবশ্যই বিশ্রীটি টুইট করতে পারেন ) can


নোট

(1) ব্যাশে সরলীকৃত বাক্য গঠনটি কীভাবে ব্যবহার করবেন

আপনার এই বাশ ফাংশন যুক্ত করুন ~/.bashrc:

calc(){ awk "BEGIN { print $*}"; }

(২) মাছের সরলিকৃত বাক্য গঠনটি কীভাবে ব্যবহার করবেন

একটি calcফিশ ফাংশন তৈরি করুন (যেমন নামের একটি পাঠ্য ফাইল /home/ndemou/.config/fish/functions/calc.fish):

function calc
    awk "BEGIN{ print $argv }" ;
end

awkআপনার সিস্টেমের doubleভাসমান বিন্দু প্রকারটি ব্যবহার করবে , সুতরাং অন্যান্য সরঞ্জামগুলির মতো যথাযথ হতে চলেছে যা স্বেচ্ছাচারিত নির্ভুলতা না করে (নোট করুন যে গাওক নির্বিচারে নির্ভুলতা করতে পারে)। আউটপুট জন্য সংখ্যাকে তাদের স্ট্রিং উপস্থাপনায় রূপান্তর awkকরতে OFMTভেরিয়েবল ব্যবহার করে ( %.6gডিফল্টরূপে, আপনি এটি পরিবর্তন করতে চাইতে পারেন যে আপনি %.17gউচ্চতর নির্ভুলতা চান )।
স্টাফেন চেজেলাস

মনে রাখবেন যে, fishএর mathএকটি ফাংশন যে কল bc(যদিও যে পরিবর্তন হচ্ছে )
Stéphane Chazelas

1
ঠিক আছে, এটি একটি ফাংশন যা কল করে bc। এটি এখন আর নতুন সংস্করণে নেই যেখানে জিনিসগুলি এখন math "scale=4; 10/3"আর কাজ করবে না ( math -s4 10/3পরিবর্তে এখনই)
স্টাফেন চেজেলাস

ধন্যবাদ স্টাফেন চেজেলাস - আমি আমার উত্তর আপডেট করেছি ( math -s4পুরানো সংস্করণগুলিতেও সমর্থিত বলে মনে হচ্ছে)
এনডেমো

3

কনসোল গণনার জন্য, আমি ব্যবহার করি concalc। ( sudo aptitude install concalc)

এর পরে, কেবল টাইপ করুন concalc এবং এন্টার টিপুন। এটি কোনও প্রম্পট সরবরাহ করবে না, তবে কেবল আপনার গণনা টাইপ করুন (কোনও ফাঁকা জায়গা নেই) এবং এন্টার টিপুন এবং পরবর্তী লাইনে এটি আপনাকে সংখ্যার মান দেবে।


3

এসকিউএলাইট :

echo 'select 1 + 1;' | sqlite3 

মাইএসকিউএল :

mysql -e 'select 1 + 1 from dual;'

পোস্টগ্র্যাস এসকিউএল :

psql -c 'select 1 + 1 as sum;'

3
উল্লেখ করার মতো কিছু ছোটখাটো বিশদ বিবরণ: ১) from dualওরাকল দ্বারা প্রয়োজনীয়, মাইএসকিউএল selectকোনও fromধারা ছাড়াই সক্ষম । 2) পোস্টগ্রিসকিউএলএলটির প্রয়োজন নেই। 3) ;শুধুমাত্র এসকিউএলাইট দ্বারা প্রয়োজনীয়। 4) মাইএসকিউএল এবং পোস্টগ্রিসকিউএল কেবল তখনই কাজ করবে যদি তারা কোনও ডাটাবেস সার্ভারে সংযোগ করতে সক্ষম হয়। 5) মাইএসকিউএল এবং পোস্টগ্রিসকিউএল ফলাফলের চারপাশে ASCII- আর্ট টেবিল আঁকবে। শুধুমাত্র মান পেতে: mysql -BNe 'select 1+1'এবং psql -tAc 'select 1+1
manatwork

2

সরবরাহিত কর্মসূচির মাধ্যমে জিএনইউ মাল্টিপল প্রিসিশন এরিমেটিক লাইব্রেরি ব্যবহার করুন run-expr:

  • ডাউনলোড এবং এক্সট্রাক্ট (আপনার এলজিপ লাগবে): tar -xvf gmp-5.1.3.tar.lz
  • শীর্ষ ডিরেক্টরিতে ./configureএবং make(ইনস্টল করার দরকার নেই)
  • ডেমো / এক্সপ্রেসে, make run-expr
  • আমি আমার ~/binডিরেক্টরিতে এটিতে একটি প্রতীকী লিঙ্ক তৈরি করতে চাই :ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
  • সহজ ব্যবহারের জন্য একটি উপনাম যুক্ত করুন; উদাহরণস্বরূপ alias calcf='run-expr -f'ভাসমান পয়েন্ট মূল্যায়নের জন্য

আউটপুট:

# calcf '2/3'
"2/3" base 0: result 0.666666666666666666667e0

run-expr.cফাইল থেকে :

Usage: ./run-expr [-z] [-q] [-f] [-p prec] [-b base] expression...

   Evaluate each argument as a simple expression.  By default this is in mpz
   integers, but -q selects mpq or -f selects mpf.  For mpf the float
   precision can be set with -p.  In all cases the input base can be set
   with -b, or the default is "0" meaning decimal with "0x" allowed.

ফাংশন শ্রেণির পার্থক্য এবং বিশদগুলির জন্য ম্যানুয়ালটি দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.