分数(最初のループから分数が計算されます)を小数点以下の二乗(2番目のループ)に上げたいのですが、結果は常に1です。また、2番目のループの出力を配列に保存したいと思います。この問題を解決する方法についてのアイデアはありますか?ありがとうございます!
#
# 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
#
答え1
試みに関連するいくつかの問題があります。これを二乗定数に上げるときの即時の質問は、それを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 }'