首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >冲漂计算问题

冲漂计算问题
EN

Stack Overflow用户
提问于 2014-09-04 19:58:35
回答 3查看 92关注 0票数 0

我尝试过许多不同的方法来评估下面的混乱情况。我认为我已经接近使用bc,但它仍然没有评估。

代码语言:javascript
复制
s=$((($s+((${flowx[$(($a+1))]}-(${flowx[$a]}))*(${flowy[$(($a+1))]}+${flowy[$a]}))/2) | bc))

有意见吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-04 20:26:53

您可以避免使用所有的引号和类似的东西,如果您使用的是hereline而不是heredoc (在其他很棒的答案中是@CharlesDuffy ),您可以这样使用heredoc

代码语言:javascript
复制
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"

版画

代码语言:javascript
复制
.09197621484831000000
票数 1
EN

Stack Overflow用户

发布于 2014-09-04 20:04:17

根本不要使用$(( ))

例如,在计算的相关部分:

代码语言:javascript
复制
s=$(bc <<<"$s + ( ( ${flowx[a+1]} - ${flowx[a]} ) * ( ${flowy[a+1]} + ${flowy[a]} ) ) / 2")

只要flowxflowy是标准的整数索引数组,而不是关联数组,那么在索引到它们(或索引中的$操作符)时,甚至不需要使用$(( )),因为bash中的非关联数组的索引默认是数学上下文。

或者,与所有这些嵌套的父类相比,更容易使用dc (在这里,配置了10位精度):

代码语言:javascript
复制
s=$(dc <<EOF
10 k
${flowx[a+1]}
${flowx[a]}
-
${flowy[a+1]}
${flowy[a]}
+
*
$s +
2 /
p
EOF
)

看到了吗?的可读性更强。

票数 3
EN

Stack Overflow用户

发布于 2014-09-05 01:59:09

如果您的系统上安装了ksh93,我建议您使用它而不是bash来完成此任务。它已经内置支持64位IEEE浮点.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25674004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档