1
fortranの使用acos()とasin()とatan()などの呼び出しを行うルーチンがあります。特定のルーチンで引数の計算が不正になることがあります。 acos(1.0000001))を使用します。倍精度を使用すると、これはなくなりますが、速度は約50〜70%低下します。しかし、それを行うための遅い方法としてfortran acos関数の引数のロバスト性
arg3= arg1/arg2
if (angle > 1) then
arg3= 1
else if (angle < -1) then
arg3= -1
end if
angle= acos(arg3)
それはそうです:私は考えることができる 唯一の他の方法は、引数を制限することです。より速い方法がありますか?私。前もってangle
を制限して、この場合は-1と1の間の値しか取らないのですか?
編集:引数はあり、結果は実数(非複合)である必要があります。
abs(arg)> 1ではなく、複雑です。しかし、私の結果は真実である必要があります。 –
申し訳ありませんbrainfault –
「最小」と「最大」の組み込み関数は 'if'条件よりも速いでしょう。倍精度であっても同じ問題が発生する危険性はありますが、おそらくそれほど難しくありません。 –