![Bash 또는 다른 언어/프레임워크에서 정수 및 부동 소수점 계산을 수행하는 방법은 무엇입니까?](https://linux55.com/image/23435/Bash%20%EB%98%90%EB%8A%94%20%EB%8B%A4%EB%A5%B8%20%EC%96%B8%EC%96%B4%2F%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%97%90%EC%84%9C%20%EC%A0%95%EC%88%98%20%EB%B0%8F%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90%20%EA%B3%84%EC%82%B0%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
문자 그대로 사용하면 echo "20+5"
" "라는 텍스트가 생성됩니다 20+5
.
25
이 경우 숫자의 합을 구하려면 어떤 명령을 사용할 수 있나요?
또한 bash만 사용하여 부동 소수점 연산을 수행하는 가장 쉬운 방법은 무엇입니까? 예를 들어 echo $((3224/3807.0))
:( 0
.
기본 명령 셸("명령줄") 자체를 사용하거나 명령줄에서 사용 가능한 언어를 사용하여 답을 찾고 있습니다.
답변1
많은 옵션이 있습니다! ! !
일반화하다
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, some 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
$ gs -q <<< "5 2 div 20 add ="
세부 사항
껍데기
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
오직ksh93
(직접) 및zsh
여기에서 라이브러리 mathfunc를 로드하세요.
$ 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
(t)csh 사용(정수만):
% @ a=25 / 3; echo $a
8
rc
쉘 계열 에서는 akanga
산술 확장이 가능합니다.
; echo $:25/3
8
POSIX 도구 상자
bc
(대화형 모드는 아래 참조)매뉴얼은 여기
니모닉: best c계산기( b
실제로 는기초적인).
$ 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
서두르다솔루션,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
그러나 역폴란드 표기법을 많이 사용하지 않는 한 그다지 실용적이지 않습니다.
이는 래퍼로 dc
이전 bc
되고 bc
역사적으로 구현되었지만 POSIX에 의해 표준화되지 않았습니다 dc
.dc
DQ 크기~의calc
(필수의 sudo apt-get install apcalc)
:
$ calc 2 + 4
6
범용 언어 통역사:
직원솔루션,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(대화형 모드: 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
>
다양한 SQL:
SQLite(대화형 모드: sqlite3
):
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQL:
mysql -BNe 'select 1+1'
포스트그레SQL:
psql -tAc 'select 1+1
_mysql 및 postgres의 옵션은 "ascii art" 이미지를 중지합니다!
전문 수학 언어:
오른쪽일반 모드에서 - 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
패리/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
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
줄리아, 과학 및 수치 컴퓨팅을 위한 고성능 언어 및 해석기입니다.
비대화형 옵션:
$ julia -E '2.5+3.7'
6.2
고스트 스크립트
GhostScript는 매우 오래된 배포판에서도 흔히 볼 수 있는 PostScript 해석기입니다.
바라보다포스트스크립트 문서지원되는 수학 명령 목록을 확인하세요.
상호작용 예시:
$ GS_DEVICE=display gs
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
GS>5 2 div 20 add =
22.5
GS>
답변2
계산 방법은 다양합니다. 간단한 표현의 경우 다음과 같이 자체적으로 사용할 수 있습니다 bash
.
echo $((20+5))
또는 expr
:
expr 20 + 5
복잡한 경우에는 훌륭한 도구가 있습니다 bc
.
echo "20+5" | bc
그런데 bc는 근, 로그, cos, sin 등을 포함한 매우 복잡한 표현식도 계산할 수 있습니다.
답변3
아직 아무도 awk를 언급하지 않았나요?
POSIX 셸 함수와 awk 수학 함수를 사용하여 다음(한 줄) 함수를 정의하세요.
calc(){ awk "BEGIN { print $*}"; }
그런 다음 calc 1+1
다음과 같은 작업을 수행하십시오.calc 5/2
참고: 이 기능을 항상 사용할 수 있게 하려면 ~/.bashrc(또는 해당 쉘의 시작 파일)에 추가하세요.
물론 다음을 포함하는 "calc"라는 작은 스크립트도 있습니다.
#!/bin/sh -
awk "BEGIN { print $* }"
일할 수도 있습니다.
답변4
당신은 그것을 사용할 수 있습니다 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
기본적으로 작동하는 방식을 선호합니다.