쉘 스크립트를 사용하고 있으며 다음 표현식을 사용하고 있습니다.
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)
하지만 물론 더 많은 프로그래밍 언어가 이 문제를 해결할 수 있습니다.