Arithmetic

將數組的每個元素提升到冪並將輸出儲存到 bash 中的新數組

  • October 9, 2019

我想將分數(在第一個循環中計算分數)提高到小數冪(第二個循環),但是,我總是得到 1 作為結果。我也想將第二個循環的輸出儲存在一個數組中。任何想法如何解決這個問題?謝謝!

#
# vector of vertical pressure levels
levs=($(seq 200.0 50.0 900.0))
printf "%s\n" "${levs[@]}"
#
# exponent for dry air
rho=$(bc -l <<<'e(l(0.0819)*0.5)')
echo $rho
#
# calculate fraction of P_surf/P_i from Poisson equation for each vertical pressure level
val3=()
#
for i in "${levs[@]}"
do
  echo $i
  val3+=($(bc -l <<<"1000.0/$i"))
  echo "$val3"
done
printf "%s\n" "${val3[@]}"
#
# raise fraction of P_surf/P_i to the rho power for dry air (#bc <<< "2 ^ 3")
pow=()
#
for j in "${val3[@]}"
do
  echo $j
  echo $rho
  pow+=($(bc <<<"$j^rho"))
  #echo $((i*rho))
  echo "$pow"
done
# 

您的嘗試有幾個問題。將rho其作為冪常數提升到bc

bc <<<"$j ^ $rho"

即使這樣,程式碼也不起作用,bc指數也不採用小數。你得到一個錯誤non-zero scale in exponent

您可以使用awk(在 GNU 變體上測試)相同並應用等精度格式

awk -v base="$j" -v xp="$rho" 'BEGIN{ printf "%.20f", base ** xp }'

引用自:https://unix.stackexchange.com/questions/545874