首页 文章

fortran acos函数论证的鲁棒性

提问于
浏览
1

使用fortran我有一些例程,它们对acos()和asin()以及atan()等进行了大量调用 . 在特定的例程中,当使用单个参数时,参数的计算有时会变得非法(即acos(1.0000001))精度变量 . 使用双精度,这会消失,但速度减慢约50-70% . 我能想到的另一种方法是限制论点:

arg3= arg1/arg2
if (angle > 1) then
  arg3= 1
else if (angle < -1) then
  arg3= -1
end if
angle= acos(arg3)

这似乎是一种缓慢的方法 . 有更快的方法吗?即预先限制 angle ,以便它只取值,在这种情况下,介于-1和1之间?

编辑:参数和结果需要是真实的(非复杂的) .

1 回答

  • 0

    我可能会试试

    angle = acos(sign(min(abs(arg1/arg2),1.0),arg1/arg2))
    

    并希望我的编译器不会两次 arg1/arg2 . 如果确实如此,那么我会尝试预先计算并使用它两次 .

相关问题