我想将分数(分数在第一个循环中计算)提高到十进制幂(第二个循环),但是,我总是得到 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
#
答案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 }'