쉘 스크립트: 실수 지수를 사용하여 숫자의 거듭제곱 계산

쉘 스크립트: 실수 지수를 사용하여 숫자의 거듭제곱 계산

쉘 스크립트를 사용하고 있으며 다음 표현식을 사용하고 있습니다.

A=`echo "(( (($a / $b) ^ 0.3) -1 ))" |bc -l`

지수로 실수를 원합니다. 0.3을 입력하면 정수로 반올림되어 0의 거듭제곱으로 올라가는 것을 확인했습니다. 마찬가지로 위 식에서 0.3 대신 5.5나 5.9를 사용해도 같은 답을 얻게 됩니다.

지수가 정수가 아닌 실수인 숫자의 거듭제곱을 계산하는 방법

답변1

^정수가 아닌 지수를 찾기 위해 연산자를 직접 사용할 수는 없지만 항등식을 사용할 수 있습니다.

a b = e ln(a) × b

e자연로그의 기초 로 사용됩니다. bc, 옵션과 함께 호출되면 에는 -l함수가 있고 e각각 l기본 거듭제곱 e과 자연 로그를 계산하므로 계산하려면 a^b을 작성 하면 됩니다 e(l(a)*b).

예를 들어 2 0.5 (2의 제곱근)의 경우:

$ echo 'e(l(2)*0.5)' | bc -l
1.41421356237309504878

답변2

왜 awk나 perl one-liner를 사용하여 처리할 수 없나요?

echo "$a $b" | awk '{ print ((($1/$2)^0.3) -1); }'

답변3

당신이 그것을 사용할 수 없을까 봐 bc. 부동 소수점 지수를 지원하지 않습니다. 설명된 대로 man bc:

표현^ 표현

표현식의 결과는 첫 번째 값에 두 번째 값을 곱한 값입니다.두 번째 표현식은 정수여야 합니다.. [...]

따라서 다음과 같은 다른 것을 사용해야 합니다 awk.

awk -va="$a" -vb="$b" 'BEGIN{print ((a/b)^0.3)-1}'

또는 Dennis Jacobs가 제안한 것처럼:

echo "$a $b" | awk '{print ((($1/$2)^0.3) -1);}'

또는 perl:

perl -le 'print ((($ARGV[0]/$ARGV[1])**0.3)-1)' "$a" "$b"

또는

echo "$a $b" | perl -lane 'print ((($F[0]/$F[1])**0.3) -1)'

답변4

bc 대신 r을 사용할 수 있습니다.

A=$(echo "x=( ( ($a / $b) ** .3 ) -1 );print (x)" | r)

하지만 물론 더 많은 프로그래밍 언어가 이 문제를 해결할 수 있습니다.

관련 정보