2011年10月2日日曜日

コンパイラーによる計算結果の差

Ga3dにひずみ軟化を取り入れ、コンパイルしてみました。

最初は、Win7 64bit + Intel Visual Fortran Composer XE 2011 で行いました。
ところが、計算が進みません。おかしい。

originalのソースをコンパイルしても同様。バンド幅の計算で誤った答えを出して止まります。

色々試しましたが、うまくいかないのでWinXP 32bit + Intel VF9 でコンパイルしてみました。
結果、配布されている original の exe (コンパイラーは Compaq)と答えは一致しましたが、outファイルの0に近い値で10^-13程度の誤差が生じます。これは仕様上、仕方ないところでしょう。

結局、このソースでは以下のような動作確認結果となりました。

 OS     exe   結果
32bit  32bit   ◎(答えは一致)
64bit  32bit   ×
64bit  64bit   ○(答えが32bitと微妙に違う箇所あり。影響のない程度)

コンパイラーによって、結果に影響のない程度の差が出てくるのは仕方のないことかもしれませんが、同じコンパイラーなのに64bitと32bitで差が出てくるのはいやらしいですね。まあ、PCを使用した数値計算の限界や収束設定値を考えて、誤差が影響のない程度であれば問題ないわけですが。

最適化オプションによっても微妙に答えが変わってくると思いますので、こういったコードの配布時にはプロジェクトのプロパティ―(セッティング)等の情報も参考程度に公開していただきたいものです。

0 件のコメント:

コメントを投稿