【发布时间】:2016-04-13 10:44:24
【问题描述】:
使用 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)
这似乎是一种缓慢的方法。有没有更快的方法? IE。预先限制angle 以便它只取值,在这种情况下,介于 -1 和 1 之间?
编辑:参数是真实的,结果必须是真实的(非复杂的)。
【问题讨论】:
-
不适用于 abs(arg) > 1 但复杂就可以了。但我的结果必须是真实的。
-
min和max内在函数可能比if条件更快。即使在双精度下,您仍然会冒同样的问题,这可能只是不太可能。
标签: performance fortran trigonometry