
MS-VisualStudio2003にて
C,C++,FORTRAN混合言語ソースで開発したシミュレーションプログラム
・混合言語(CをメインにC++,FORTRAN9.0含む)
・ライブラリ指定(シングルスレッド、debugモード)
を
MS-VS2005にシフトしましたが計算結果の違いが結構出てくることで
悩んでいます(悩ましいことに、多少違ってくる)
MS-VS2005環境は
・ライブラリがマルチスレッド環境のみ
・IntelFORTRANはVer9.10
の様ですが、弊方はこの環境を持っておらず、
環境設定などの詳細がわかないで困っています
PC環境、プログラミングの問題、その他いろいろと考えられる
因子はありますが、弊方と同じような開発環境で悩んだ方で
・MS-VisualStudio開発環境(2003,2005)
・IntelFORTRAN環境 (9.0/9.1)
以上の大きな相違点など何かヒントでもあればありがたく
書き込みいただければ幸いです

No.7ベストアンサー
- 回答日時:
「相手先が…」というのは、お客様ですか。
。。顧客が問題にするなら、問題ですね。
きちんとした理由をもって説明しないと。。でも、大変そうだ。
計算誤差が発生する簡単なサンプルプログラム(実プログラムから抜き出せたらもっといいですが)を作って、計算に違いが生じることを説明できたら、シミュレーション結果の違いは許容できる誤差の範囲であれば、納得してくれるようなクライアントなんでしょうかね?^^
>顧客が問題にするなら、問題ですね。
>きちんとした理由をもって説明しないと
御察しいただき 有難う御座います
>計算誤差が発生する簡単なサンプルプログラム(実プログラムから抜き出せ>たらもっといいですが)を作って、計算に違いが生じることを説明できた
>ら、
その辺りで確認して、証拠を作るしかなさそうです
本日(8/25 17:10)は、別件でPCを離れますので
失礼致します
いろいろ有難う御座いました
No.6
- 回答日時:
#2のzwiです。
VS2005からはシングルスレッドライブラリは無くなっているので選べません。
基本的にはマルチスレッドセーフになっているだけのライブラリだと思うのですが、VS2003のシングル時と浮動小数点誤差に関する差があるのかは確認したことが無いので分かりません。試しにVS2003をマルチスレッドライブラリで動かしてみるのも手かもしれません。
それとプログラムの最適化の基準は変わっていると思いますので、そのために演算の順位などが変わっていると誤差も変わるかもしれません。
>MS-VSのバージョンアップのたびに、こんな問題で悩んでいる方々がいるのではと思う今日この頃です
前からコンパイラのバージョン毎の浮動小数点ライブラリの誤差の問題はあった気がします。そのために精度の高い有料のサポートがある浮動小数点ライブラリが売られてたりしますので、そういう需要があるのだと思います。
最後に誤差の原因になる部分をDLLとかにパッケージとして封じ込められれば、提供する側としては安心できるかも知れませんので検討してみてください。
>試しにVS2003をマルチスレッドライブラリで動かしてみるのも手かもしれ
>ません。
一応VS2003環境で試してみました
結果は問題ありませんでした
(完全に隅から隅まで数値をチェックした訳ではありませんが)
>最後に誤差の原因になる部分をDLLとかにパッケージとして封じ込められ>れば、提供する側としては安心できるかも知れませんので検討してみてくだ>さい。
参考にさせて頂きます
返答してくださった皆様
いろいろアドバイス有難う御座いました

No.4
- 回答日時:
ライブラリが、シングルスレッド→マルチスレッドに変わってますが、
このライブラリというのは、行列計算などをするものですか?
で、マルチスレッドのライブラリの関数を呼ぶと自動的にスレッド生成して並行計算するみたいな。。。
それなら、シングルとマルチで、ライブラリ中の関数の計算順序が変わってる可能性が大きいので、計算結果に多少の違いが生じる可能性も大ですよね。
しょせん、近似計算なのだから、あまり細かい数値誤差は気になさらないほうがよろしいのでは? わたしは、自分で書いたシミュレーションプログラムなどがコンパイラをバージョンアップして、計算結果が違ってきても、許容誤差範囲なら何も調べませんでしたけど^^;
mikaemiさん
早速の回答・ご返事有難うございました(本当に早かったですね)
プログラムはVS2003シングル開発ですから(元はWin3.1、DegitalFortran時代から継承なのです)マルチの必要なないのですが
相手先が、VS2005(マルチ)のみ環境らしく、この計算誤差の原因を
どう説明しようかと考えております
おっしゃる通り、私も計算結果は許容誤差範囲かなと考えておりますが
この誤差がもとで、収束計算/最適化ループ計算の中で雪だるま的になる
場合もありまして、手を焼いている次第です
VS2005の知識が無く申し訳ありませんが
VS2005のライブラリはマルチの環境設定しかないのでしょうか?
とするとMS-VSのバージョンアップのたびに、こんな問題で悩んでいる
方々がいるのではと思う今日この頃です

No.3
- 回答日時:
ん?ライブラリがデバッグモードってありますね。
もし、コンパイルもデバッグモードでしているなら、
最適化はかかってないかもしれないですね^^
zwi さんが指摘されているように、バイナリ→文字列変換の方法が、
バージョンアップで変わってる可能性はありますね。
Fortran なら unformatted で出力して比較するのがいいのかな。
unformatted のファイルの形式も変わってるという可能性は低いと思いますので^^
No.2
- 回答日時:
>・MS-VisualStudio開発環境(2003,2005)
>・IntelFORTRAN環境 (9.0/9.1)
私はこの組み合わせの経験はないのですが、ピンポイントな組み合わせなので都合よく同等の条件で困った方から返事がある可能性が低いと思われます。
そこでアドバイスです。まずやるべきことは、
●FORTRAN側かVisualStudio側に原因があるのか原因を切り分けること。
どこで誤差が生まれたかを切り分けます。様々なポイントで、浮動小数点値をテキストファイルに書き出して、新しい方と古いほうで比較して違いが出てくる場所を見つけます。
表示誤差とかが気になるので出来れば浮動小数点値のバイナリーデータで比較することが望ましいです。
●ソフト的に誤差が生まれる原因として考えられるのは、
1.表示時の誤差。表示しているプログラム側の丸め誤差。
2。提供されている浮動小数点ライブラリ関数の仕様変更。打ち切り誤差などが違う。
3.型変換時の変換誤差。正規化の丸め誤差に差がある?
辺りでしょうか。
参考↓
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
zwiさん
貴重な書き込み、アドバイス有難う御座いました
確かに楽して問題は解決しないですね
一番くさいのは、MS-VS環境(シングル/マルチ)や混合言語によるメモリの取り扱い
方による、浮動小数点の誤差かと睨んでいますが
今一度調べてみます

No.1
- 回答日時:
コンパイラがバージョンアップ(たとえば、Interl Fortran 9.0/9.1 → 9.10)したということですし、
コンパイラの最適化レベルが変わって、浮動小数点の計算結果に多少の違いが出てきたのではないのでしょうか?
まったく最適化しないオプションをつけてコンパイルして、VS2003 と VS2005 でコンパイル・リンクした計算結果を比較してみるのはどうでしょう?
デフォルトの丸めモードなども変わってる可能性があれば異なるでしょうけど。
ところで、シミュレーション結果が容認できないほど変わってしまったということなのでしょうか?
あるいは、許容範囲の誤差ではあるが、プログラムを修正後の単体テストをするのに、
VS2003で出した計算結果とプログラム修正後の計算結果を字面上で単純に比較してチェックできないので、困っているということですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- ソフトウェア 移行PCにDockerがインストールされていても各種開発環境のアプリはインストールが必要? 2 2023/05/21 21:53
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- オンラインゲーム 回線速度の悩みです。 スマホのブラウザで回線速度を測るとmbpsもping値も問題ない数字なのですが 4 2022/12/23 22:55
- C言語・C++・C# Switch向けにpcでc言語でゲームを作っているのですが、開発環境はWindows10のvisua 1 2022/04/02 07:04
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- いじめ・人間関係 いじめ被害者の方へご質問/答えられる範囲で構いません 6 2023/06/21 14:25
- その他(法律) 絶滅危惧種の違法取引について 2 2023/06/24 09:53
- 経済学 因子分析における因子得点の解釈について 1 2022/12/10 02:05
- IT・エンジニアリング プログラマーです 未経験から一年半汎用系(.NET、C#)システムを作っていました。自社なので1から 3 2023/03/16 20:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
2進数の足し算(C言語)
-
有効数字について 以前質問をし...
-
EXCELの関数"STDEV(標準偏差)"...
-
C言語について質問です。
-
”/”を使わずに割り算したいんで...
-
色の判定
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
Visual Studioのバージョンによ...
-
アルゴリズムについての質問です
-
CRCの計算方法について
-
z80について
-
VB.net Double と...
-
C言語でセルオートマトンを作成...
-
乱数 なぜ剰余を使うのか
-
コンピューターは指数関数をど...
-
PICで小数点の演算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報