bash 또는 다른 언어 / 프레임 워크에서 정수 및 부동 소수점 계산을 수행하는 방법은 무엇입니까?


294

사용 echo "20+5"문자 그대로하면 텍스트를 "생산 20+5".

25이 경우 숫자 합계를 얻기 위해 어떤 명령을 사용할 수 있습니까?

또한 부동 소수점에 bash를 사용하는 가장 쉬운 방법은 무엇입니까? 예를 들어, echo $((3224/3807.0))인쇄 0:(.

기본 명령 셸 ( '명령 줄') 자체를 사용하거나 명령 줄에서 사용할 수있는 언어를 사용하여 답을 찾고 있습니다.


1
를 사용하는 경우 매뉴얼 페이지 bc-l옵션에 대해 읽는 것이 좋습니다.
glenn jackman 2016 년

필자는 저자가 bash 명령 줄을 요구한다고 가정하지만 대답은 모든 종류의 스크립팅 언어로 다양 화하는 경향이 있습니다.
jinking

2
남자 bash → / expression
ДМИТРИЙ МАЛИКОВ

1
@zinking 글쎄, bash는 많은 다른 스크립팅 언어에 대한 통역사를 쉽게 호출 할 수 있도록 설계되었다.
Random832

부동 소수점 결과로 bash 정수 나누기를 가르치십시오 : stackoverflow.com/a/24431665/3776858
Cyrus

답변:


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

세부

포탄

정수 산술에 POSIX 산술 확장을 사용할 수 있습니다 echo "$((...))".

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

이식성 ( ash dash yash bash ksh93 lksh zsh) :
printf 기능을 사용하여 부동 소수점을 인쇄하면 제한된 범위 (10 자리 이하)로 부동 소수점 연산을 수행하도록 대부분의 쉘을 확장 할 수 있습니다.

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

ksh93, yash그리고 zsh여기에 지원 수레를 수행합니다

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

라이브러리 mathfunc 만 ksh93(직접) zsh로드하는 경우 :

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

( 와 같은 기능 zsh을 사용하려면로드해야합니다 ).zmodload zsh/mathfuncatan


zsh와 대화식으로 :

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

(t) csh 사용 (정수만 해당) :

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

에서 rc쉘 가족, akanga연산 확장과 하나입니다 :

; echo $:25/3
8

POSIX 툴 체스트

bc(대화식 모드는 아래 참조), 매뉴얼은 여기

니모닉 : best calculator ( b실제로는 basic입니다 ).

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

(임의의 정밀도 숫자 지원)


bc 대화식 모드 :

$ 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 의 솔루션 expr(대화식 모드 없음) :

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

Joshua의 해결책 : awk(대화식 모드 없음) :

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

다른 다소 휴대용 도구

Arcege 의 솔루션 dc(대화식 모드 :)dc :

역 연마 표기법으로 작동하기 때문에 훨씬 더 재미 있습니다.

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

그러나 리버스 광택 표기법을 많이 사용하지 않으면 실용적이지 않습니다.

참고 dc선행 bcbc역사적 래퍼로 구현되어 dc있지만, dcPOSIX에 의해 표준화되지 않았습니다


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 (대화식 모드 :)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)"

Marco 의 솔루션 lua(대화식 모드 :)lua :

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

PHP (대화식 모드 :)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 :

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

S-Lang (대화식 모드 : slsh; 출력 기능 불필요, ;터미네이터) :

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

Tcl (대화식 모드 : 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
>

다양한 SQL :

SQLite (대화식 모드 :)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

_mysql과 postgres의 옵션은 '아스키 아트'이미지를 멈 춥니 다!

전문 수학 중심 언어 :

일반 모드의 R -1000 개의 정규 난수를 생성하고 표준 편차를 가져 와서 인쇄합니다.

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

R 은 Using 의 littler 스크립트 - 제곱 인쇄 파이를 할 수 있습니다

$ 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

GNU Octave (고급 해석 언어, 주로 수치 계산 용)

복소수도 지원합니다.

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

Julia 는 과학 및 수치 컴퓨팅을위한 고성능 언어 및 통역사입니다.

비 대화식 옵션 :

$ julia -E '2.5+3.7'
6.2

3
그리고 bc는 흥미 롭습니다 : whatis bc-> An arbitrary precision calculator language 흥미 롭습니다 ! 감사!
Michael Durrant

@MichaelDurrant 수정 사항을 다시 수정할 수 있습니까? 실수로 거부 했습니까?
lgarzo

4
또한이 dc는 역 폴란드 표기법으로 작동하기 때문에 훨씬 더 재미이다. echo 20 5 + p | dc 그러나 리버스 광택 표기법을 많이 사용하지 않으면 실용적이지 않습니다.
Arcege 2016 년

2
bc 접근 방식의 변형으로 .bashrc 파일에 다음 함수 (어딘가에서 stackexchange에서 찾음)를 추가했습니다. calc 2 + 3을 입력하고 5를 얻을 수 있습니다. ## Command line calculator calc () { bc -l <<< "$@" }
Joe

1
@Chris, 물고기는 움직이는 목표입니다. 그들은 math우리가 말하는 것처럼 새로운 내장 (또는 지금 불려지는 것)을 연구하고 있습니다. 자유롭게 편집하십시오. 내 대답이 아니며 커뮤니티 위키입니다.
Stéphane Chazelas

35

계산하는 방법에는 여러 가지가 있습니다. 간단한 표현식의 경우 bash자체 를 사용할 수 있습니다 .

echo $((20+5))

또는 expr:

expr 20 + 5

복잡한 경우에는 훌륭한 도구가 있습니다 bc.

echo "20+5" | bc

Btw, bc는 근, 대수, cos, sin 등으로 매우 복잡한 표현을 계산할 수 있습니다.


expr수락 된 답변 에 귀하의 옵션을 추가했습니다 . 수용하고 중앙 집중화 할 하나를 선택해야했습니다.
Michael Durrant 2016 년

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와 같은 스크립팅 언어를 사용합니다. 그러나 익숙한 스크립팅 언어를 선택할 수 있습니다. 난 그냥 예를 들어 루아를 사용합니다. 장점은

  • 익숙한 구문
  • 익숙한 기능
  • 익숙한 경고
  • 유연한 입력
  • 공백은 일반적으로 중요하지 않습니다
  • 부동 소수점 출력

예 :

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'소수 부분을 원할 경우.
manatwork

수정 해 주셔서 감사합니다. 그러나 여전히 오류가 발생하기 쉽습니다. 몇 주 안에 scale사용하면 추가 해도 bc되나요? 아마 아닙니다. 영구적으로 변경하는 방법이 있더라도 기본 설정이있는 시스템을 사용하는 경우에는 물릴 것입니다.
Marco

3
개인적으로 나는 몇 년 전에 처음 scale만난 이후로 기억 bc합니다. 그러나 출력 기능 luaput또는 인지 여부를 항상 잊었습니다 puts. ;)
manatwork

bc를 스크립팅 언어 중 하나로 간주하십시오. 정수 결과가 필요한지 여부를 항상 알고 있습니다. 정수가 괜찮다면 bash에 남아 있습니다. 그렇지 않으면 bc를 사용할 이유가 거의 없습니다. 루아의 경우 -e, 인쇄 및 괄호를 기억해야합니다.
사용자가 알 수 없음

7
항상 bc -l평범한 것이 아니라 항상 사용하고 bc걱정하지 마십시오 scale.
Dalker

23

아직 awk를 언급 한 사람이 없습니까?

POSIX 쉘 함수와 awk math power를 사용하여 다음 (한 줄) 함수를 정의하십시오.

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

그런 다음 calc 1+1또는calc 5/2

참고 : 기능을 항상 사용 가능하게하려면 ~ / .bashrc (또는 해당 쉘의 시작 파일)에 추가하십시오.

물론 다음 내용을 가진 "calc"라는 작은 스크립트가 있습니다.

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

작동 할 수도 있습니다.


2
와우는 최고이며, 심지어 수레를 지원합니다. 아무것도 설치하지 않고 작동합니다!
CMCDragonkai 2018 년

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

GNU 구현은 bcstdin과 stdout이 모두 터미널로 갈 때 시작시 해당 헤더 / 저작권 정보를 인쇄합니다. (GNU 특정) -q옵션으로 억제 할 수 있습니다 . 자세한 내용은 bc 매뉴얼 페이지를 참조하십시오


1
파이프 ( "|") 및 bs의 대화식 모드 옵션 모두 +1 하나 ctrl-d를 종료합니까?
Michael Durrant

1
@MichaelDurrant 그렇습니다, ^ D는 의지대로 트릭을 할 것입니다quit
Levon

c () { bc -l <<< "$@" } c 빠르고 쉽게 사용할 수 있는 기능 을 정의합니다 . 예를 들어 c 3/2당신에게 줄 것이다 1.50000000000000000000. 그 방법을 설명하는 위의 링크는 죽었습니다.
ijoseph

1
@Levon 맨 페이지 링크는 여전히 작동합니다. 그러나 paweng.com/2008/08/15/unix-command-line-calculator 링크 는 "이 페이지는 또한 별칭 설정 방법을 보여줍니다"라는 문장에서 "This"의 대상으로 제공합니다. 죽은.
ijoseph

1
@ijoseph 감사합니다 .. 나는 그 6 살짜리 링크에 대한 참조를 제거했습니다 (링크가 내 브라우저에서 더 명확하게 나타났습니다-어제 보았을 때조차 보지 못했습니다)
Levon

16

당신은 사용할 수 있습니다 calc:

방금 입력하면 calc다른 인수는 그냥 수학을 일을 계속 할 수있는 대화 형 모드로 들어갑니다. exit를 입력하여 종료합니다 :

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. 기본 동작 방식이 더 좋습니다.


1
특별히 원치 않는 한 대화식 모드로 들어갈 필요가 없습니다. 예 : calc -e '2+4; 3+5; 3.4+5; 2^44 개의 출력 라인을 인쇄하거나 그냥 calc -e 33+(3^3).. +1 계산기에 'calc'라는 것을 사용하는 아이디어가 좋습니다 :)
Peter.O

1
방금 -e단 하나의 표현이있을 때 옵션이 필요하지 않다는 것을 깨달았습니다 ... 깔끔한! ..
Peter.O

10

나는 파이썬을 시작하고 그것을 대화 형 계산기로 사용하는 것을 좋아합니다 (그러나 다시 파이썬 프로그래머입니다).


나도! 파이썬은 나의 스위스 군용 칼입니다
Levon

screen파이썬을 실행하는 데 항상 하나의 창이 있습니다.
Arcege

1
pythonpy ( github.com/russell91/pythonpy는 ) 대화 형 쉘 해고하지 않고 이것과 파이썬 구문에서 다른 일을 할 수있는 좋은 방법입니다 => 16 '* 5 3.2'평을
RussellStewart

나는 파이썬을 좋아하지만 bash 스크립트의 몇 군데에 두 개의 숫자를 추가하고 싶다면 시작 시간이 중요해진다
ndemou

@ndemou 나는 "대화 형"계산기를 말했다. 스크립트에서 복잡한 작업을 수행하는 경우 언젠가는 파이썬과 같은 bash 이외의 것을 사용하도록 지시한다는 점도 주목할 가치가 있습니다.
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

추가 프로그램을 설치할 필요가없는 옵션이 너무 많아서 왜 그런 식으로 가고 싶어하는지 알 수 없습니다.
ndemou

@ndemou 일부 배포판에 기본적으로 설치되어 있지만 다른 답변은 많지 않습니다. 그리고 5 살짜리 답변에 대해 그 말을 정말로해야 했습니까?
Random832

1
나는 투표권을 행사할 때 의견을 제시하는 것이 좋으며 SE가 권장하는 관행이라고 생각합니다. 5 년이 왜 관련이 있는지 모르겠습니다. 동일한 의견이 모든 유사한 답변에 적용되며 개인은 아닙니다. (BTW는 가장 모호한 프로그램조차도 일부 배포판 에 기본적으로 설치 될 수 있습니다 .이 경우 데비안, 우분투, CentOS 및 RedHat의 최신 설치를 테스트
했지만

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
이것이 ghcGlasgow Haskell Compiler 를 의미합니까?
manatwork

설치해야하지만 thx는 필요한 프로그램을 전달합니다.
Michael Durrant

4

"JavaScript의 힘"을 읽을 수는 없지만 펄을 제외하고 다른 부분에 대한 답변을지지해야했습니다.

실제로 정수 산술이 충분한 간단한 경우에는 buildin $ ((...))을 사용하고 권장합니다. 그렇지 않으면, 거의 모든 경우에 에코 "..."| BC는 충분하다.

통계와 같은 일부 산술 연산의 경우 행렬 연산 등이 더 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:])))같은 일을?
g.rocket

당신은 여기에서 파리를 치기 위해 망치를 사용하고 있습니다
ndemou

4

그노 플롯

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

루트 (또는 다른 C 인터프리터 )

ROOT 시스템은 매우 효율적인 방법으로 많은 양의 데이터를 처리하고 분석하는 데 필요한 모든 기능을 갖춘 OO 프레임 워크의 집합을 제공합니다 ...

당신은로 사용할 수 있습니다 C 인터프리터 , CINT , 또는 당신이 중 하나를 사용할 수 있습니다 많은 다른 많은 C 통역 . IMHO는 거대하고 복잡하며 강력하며 항상 친절하지는 않지만 큰 만족감을 줄 수 있습니다.

당신이 정말로 Confucio 를 인용하는 당신의 작은 목소리를 듣고 싶지 않고 바퀴에서 (버터) 파리를 깰 준비가되어 있다면 root 를 사용할 수 있습니다 . 이 경우 -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, yash

부동 소수점 산술 (여기서 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, yash

물론 최소한의 타이핑으로 awk를 사용하도록 쉘을 구성 할 수 있습니다 calc 10/3(bash 1 및 fish 2 에 대해 수행하는 방법에 대한 참고 사항 참조 ).

bash에 awk를 제안하는 주된 이유는 거의 모든 유닉스 계열 OS에 사전 설치되어 있고 bc -l20 보다 작은 20 자릿수를 인쇄하는 것보다 덜 정확하지만 인간 친화적 인 출력으로 합리적으로 가볍습니다 (물론 프로세스 시작 비용이 있음) 숫자 ( 더 많은 십진수를 얻기 위해 awk를 확실히 조정할 수는 있지만 ).


노트

(1) bash에서 단순화 된 구문을 사용하는 방법

이 bash 함수를 다음에 추가하십시오 ~/.bashrc.

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

(2) 어류에서 단순화 된 구문을 사용하는 방법

calc피쉬 함수 (예 /home/ndemou/.config/fish/functions/calc.fish: 라는 텍스트 파일 )를 만듭니다 .

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

awk시스템의 double부동 소수점 유형을 사용하므로 임의의 정밀도를 수행하지 않는 대부분의 다른 도구와 마찬가지로 정확 합니다 (gawk는 임의의 정밀도를 수행 할 수 있음에 유의하십시오). 변수를 awk사용하여 OFMT출력을 위해 숫자를 문자열 표현으로 변환합니다 ( %.6g기본적으로 %.17g더 높은 정밀도 를 원한다면이 를 변경할 수 있습니다 ).
Stéphane Chazelas

참고 fish들 ' math호출 단지 기능입니다 bc(하지만 그 변화의 )
스테판 Chazelas가

1
글쎄, 그것은 호출하는 함수였습니다 bc. math "scale=4; 10/3"더 이상 작동하지 않는 최신 버전에서는 더 이상 사용되지 않습니다 ( math -s4 10/3대신 지금)
Stéphane Chazelas

감사합니다 Stéphane Chazelas-답변을 업데이트 math -s4했습니다 (이전 버전에서도 지원되는 것 같습니다)
ndemou

3

콘솔 계산에는을 사용 concalc합니다. ( sudo aptitude install concalc)

그 후, 그냥 입력 concalc 하고 엔터를 누르십시오. 프롬프트를 제공하지는 않지만 계산을 입력하고 (공백 없음) Enter 키를 누르면 다음 줄에 숫자 값이 표시됩니다.


3

SQLite :

echo 'select 1 + 1;' | sqlite3 

MySQL :

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

PostgreSQL :

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

3
언급 할 가치가있는 몇 가지 사소한 세부 사항 : 1) from dualOracle이 필요로하며 MySQL은 절 select없이 할 수 from있습니다. 2) PostgreSQL에는 별칭이 필요하지 않습니다. 3) ;는 SQLite에서만 필요합니다. 4) MySQL과 PostgreSQL은 데이터베이스 서버에 연결할 수있는 경우에만 작동합니다. 5) MySQL과 PostgreSQL은 결과를 중심으로 ASCII 아트 테이블을 그립니다. 값만 얻으려면 : mysql -BNe 'select 1+1'psql -tAc 'select 1+1.
manatwork

2

제공된 프로그램을 통해 GNU 다중 정밀도 산술 라이브러리 를 사용하십시오 run-expr.

  • 다운로드 및 추출 (lzip 필요) : 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.