Birçok seçenek var !!!
özet
$ 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
ayrıntılar
kabuklar
Tamsayılı aritmetik için POSIX aritmetik genişlemesini kullanabilirsiniz echo "$((...))"
:
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
Oldukça taşınabilir ( ash dash yash bash ksh93 lksh zsh
):
Yüzenleri yazdırmak için printf özelliğini kullanarak, çoğu mermiyi sınırlı bir aralıkta olmasına rağmen kayan nokta matematiği yapmak için uzatabiliriz (en fazla 10 basamak):
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
, yash
Ve zsh
burada destek yüzen yapın:
$ echo "$((1.2 / 3))"
0.4
sadece ksh93
(doğrudan) ve zsh
buraya kütüphane mathfunc yüklüyor:
$ echo "$((4*atan(1)))"
3.14159265358979324
( gibi işlevleri almak zsh
için yüklemeniz gerekir ).zmodload zsh/mathfunc
atan
Zsh ile etkileşimli:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
(T) csh ile (yalnızca tam sayı):
% @ a=25 / 3; echo $a
8
In rc
kabuk ailesi, akanga
aritmetik genişleme biridir:
; echo $:25/3
8
POSIX araç testi
bc
(etkileşimli mod için aşağıya bakın), burada manuel
Mnemonic: best chesap makinesi ( b
gerçekte basit olmasına rağmen ).
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(isteğe bağlı hassas sayıları destekler)
bc etkileşimli mod:
$ 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
Rush'ın çözümü, expr
(etkileşimli mod yok):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
Joshua'nın çözümü : awk
(etkileşimli mod yok):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
Diğer az ya da çok taşınabilir araçlar
Arcege çözümü, dc
(etkileşimli mod :)dc
:
Ters cila notasyonu ile çalıştığı için daha da eğlenceli.
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
Fakat çok fazla ters cila gösterimi ile çalışmadığınız sürece pratik değil.
dc
Önceden ortaya çıktığını bc
ve bc
tarihsel olarak bir sarmalayıcı olarak uygulandığını dc
ancak dc
POSIX tarafından standartlaştırılmadığını unutmayın.
DQdims 'in calc
(gerekli sudo apt-get install apcalc)
:
$ calc 2 + 4
6
Genel amaçlı dil tercümanları:
manatwork'ün çözümü, node
(etkileşimli mod node
:; çıktı işlevine gerek yoktur):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl (etkileşimli mod :)perl -de 1
:
$ perl -E "say 20+5/2"
22.5
Python (etkileşimli mod python
:; çıktı işlevine gerek yoktur):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
Ayrıca isteğe bağlı hassas sayıları destekler:
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
Eğer clisp
yüklediyseniz, cila gösterimini de kullanabilirsiniz:
$ clisp -x "(+ 2 2)"
Marco 'nun çözümü, lua
(etkileşimli mod:) lua
:
$ lua -e "print(20+5/2)"
22.5
PHP (etkileşimli mod :)php -a
:
$ php -r 'echo 20+5/2;'
22.5
Ruby (interaktif mod irb
:; çıktı işlevi gerekli değildir):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile (etkileşimli mod :)guile
:
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang (etkileşimli mod slsh
:; çıktı işlevi gerekli değil, sadece ;
sonlandırıcı):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl (etkileşimli mod tclsh
:; çıktı işlevi gerekli değildir, ancak expr
is):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
Javascript kabukları:
$ 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
>
Çeşitli SQL'ler:
SQLite (etkileşimli mod :)sqlite3
:
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQL :
mysql -BNe 'select 1+1'
PostgreSQL :
psql -tAc 'select 1+1
_Myql ve postgres seçenekleri “ascii art” imajını durdurur!
İhtisas matematik odaklı diller:
Düz modda R - 1000 Normal rasgele sayı üretmenizi ve standart sapmayı elde etmenizi ve yazdırmanızı sağlar
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
Littler betiğini kullanarak R - pi kare yazdırmayı sağlar
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GP , sayı teorisi, doğrusal cebir ve diğer birçok şey için kapsamlı bir bilgisayar cebir sistemi
$ 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
GNU Octave (öncelikle sayısal hesaplamalar için tasarlanan, üst düzeyde yorumlu bir dil)
Ayrıca karmaşık sayıları destekler:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
Julia , bilimsel ve sayısal hesaplama için yüksek performanslı bir dil ve tercüman.
Etkileşimli olmayan seçenek:
$ julia -E '2.5+3.7'
6.2
bc
hakkında okumak için zaman ayırmaya değer olabilir-l
.