私たちは、インテルのVisual Fortranを使用して再コンパイルしようとしているこの古いFortranスクリプトを持っていますが、コードの古いコンパイルバージョンとは異なる計算エラーと異なる結果を得ています。'属性を保存する'とプロパティを扱う際のFortranコンパイラの違いは?
以下のコードで問題と思われるものを見つけました(これは数値レシピに由来します)。
問題は、 'it'パラメータが各呼び出しでリセットされることですが、関数呼び出しの間に格納する必要があります。
問題が起きる可能性が最も高いのは、古いコンパイラでは 'それを'保存属性 'として扱い、関数呼び出しの間に保存している可能性があるということです。
ここでは完全に間違っているかもしれませんが、一部のFortran-guruがこれを確認したり、より良い説明をすることができれば、私たちはいくつかの助けを愛するでしょう!
subroutine TrapezoidalRule(Func, a, b, s, n)
*
* This routine performs the trapezoidal rule, see Numerical Recipes
*
implicit none
real*8 Func, a, b, s
Integer*4 n
external Func
*
real*8 del, x, sum
Integer*4 it, tnm, j
*
if (n .eq. 1) then
*
s=0.5d0*(b-a)*(Func(a)+Func(b))
it=1
*
else
*
tnm=it
del=(b-a)/dble(tnm)
x=a+0.5d0*del
sum=0.d0
do 11 j=1,it
*
sum=sum+Func(x)
x=x+del
*
11 continue
*
s=0.5d0*(s+(b-a)*sum/dble(tnm))
it=2*it
*
endif
*
return
end
聞きたいことはありますか?一種の、ちょっと...信じる理由があれば、おそらく本当です。だから、何が問題なのですか?それは可能ですか?はい、可能です。しかし、もっと何を望んでいますか? –
私たちは、あなたの間違った結果と間違った結果を持っていません。彼らはどのように違うのか分かりませんし、テストを複製することはできません。私たちは本当にあなたを信じるためにそれ以上のことはできません。 'save'属性の追加が助けになりましたか?私たちはそれがどのコンパイラであったか知りません。 –
私の質問で私が不明な場合は申し訳ありません。ここで少し不満。 初期の作業にまだ誰も関与していないため、どのコンパイラが使用されたのかわかりません。 Fortranの優れた見識を持った人が、これについての良い情報を見つけるのに苦労していたため、過去に「属性の保存」がどのように扱われているかを知りたいと思っていました。 – Petter