我尝试过许多不同的方法来评估下面的混乱情况。我认为我已经接近使用bc,但它仍然没有评估。
s=$((($s+((${flowx[$(($a+1))]}-(${flowx[$a]}))*(${flowy[$(($a+1))]}+${flowy[$a]}))/2) | bc))有意见吗?
发布于 2014-09-04 20:26:53
您可以避免使用所有的引号和类似的东西,如果您使用的是hereline而不是heredoc (在其他很棒的答案中是@CharlesDuffy ),您可以这样使用heredoc:
flowx=(0.124852 -0.0156593 -0.0932662 -0.0464323 0.0305706 0.00833429 0.0245359 0.0292034 -0.0564935)
flowy=(0.197532 0.120311 0.0864692 -0.0071995 0.097294 0.0624036 0.0825287 0 0.0340206)
a=1
s=0.1
res=$(bc -l <<EOF
$s + ( ( ${flowx[a+1]} - ${flowx[a]} ) * ( ${flowy[a+1]} + ${flowy[a]} ) ) / 2
EOF
)
echo "$res"版画
.09197621484831000000发布于 2014-09-04 20:04:17
根本不要使用$(( ))。
例如,在计算的相关部分:
s=$(bc <<<"$s + ( ( ${flowx[a+1]} - ${flowx[a]} ) * ( ${flowy[a+1]} + ${flowy[a]} ) ) / 2")只要flowx和flowy是标准的整数索引数组,而不是关联数组,那么在索引到它们(或索引中的$操作符)时,甚至不需要使用$(( )),因为bash中的非关联数组的索引默认是数学上下文。
或者,与所有这些嵌套的父类相比,更容易使用dc (在这里,配置了10位精度):
s=$(dc <<EOF
10 k
${flowx[a+1]}
${flowx[a]}
-
${flowy[a+1]}
${flowy[a]}
+
*
$s +
2 /
p
EOF
)看到了吗?的可读性更强。
发布于 2014-09-05 01:59:09
如果您的系统上安装了ksh93,我建议您使用它而不是bash来完成此任务。它已经内置支持64位IEEE浮点.
https://stackoverflow.com/questions/25674004
复制相似问题