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선행 bc과 bc역사적 래퍼로 구현되어 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합니다. 그러나 출력 기능 lua이 put또는 인지 여부를 항상 잊었습니다 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.