- 締切済み
理由がわかりません・・・
C言語でプログラムを作成して簡単な計算(ヒストグラムの平均値計算)をしているのですが、 使用するPCによって、異なる結果が出てしまいます。 コンパイラ(gcc)のバージョンも同じだし、計算に使用するデータも同じなので、原因が全くわかりません。特にランダム変数とか使っているわけでもありませんし・・・ どなたか、同じようなご経験をお持ちの方、原因が推測できるかた教えてください。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- sunasearch
- ベストアンサー率35% (632/1788)
おそらく、#2さんがおっしゃられるように、ヒストグラムを作成する際に、度数を入れておく配列、もしくは平均を出すために合計を入れておく変数のいずれかが0に初期化されていないのが原因だと思います。 異なる結果というのが、小数点以下のレベルで異なる値なのか、見当はずれの値が出るのか、正しい結果が出ることがあるのかなどを示してもらえれば、解決が早いと思います。 #ソースを載せてもらえたら一番早いんですけどね。
計算時の値の丸め誤差が起きているのかもしれません。 これは小数点の値が正確に計算されない現象のことで、 原因はコンピューターは2進数で値を管理する為です。 もし、小数点の計算をしているのならこの丸め誤差が影響している可能性はあります。 この問題のコンピューターを使っている以上解決法はありません。
- jacta
- ベストアンサー率26% (845/3158)
自動変数やmallocで割り付けたメモリブロックの初期化を忘れているとかではありませんか? あるいは、環境変数やレジストリに依存する処理が含まれているとか...
- yasuch
- ベストアンサー率41% (27/65)
4台とも同じ処理系ですか? 処理系が違うのであれば、INT型の演算で1台だけ オーバーフローしたりするって可能性も考えられそうです。
- neKo_deux
- ベストアンサー率44% (5541/12319)
> 全く同じプログラムを4台のPCでコンパイル、実行 > してみたところ、1台のみ異なる誤った結果が出てしまいます。 正常なPCで作成した実行形式をおかしなPCに持ってきた場合は? 良くあるのは、配列を確保した際の配列の内容の初期値は未定義なので初期化しないと正しく動作しないのですが、3台のPCではたまたま0とか都合の良い数字で初期化されて、誤って正常動作のように見えてしまうとか。
お礼
なるほど、同じ実行形式ファイルで 確認する必要もありますね。 試してみます! ありがとうございます。
- neKo_deux
- ベストアンサー率44% (5541/12319)
まずは、 1 1 1 1 … などの結果の分かりきった単純なデータを使って、正しく計算されているか? 結果が違うのならどちらが違うか? あたりから調べてみては?
お礼
早速回答いただきまして、ありがとうございます。 全く同じプログラムを4台のPCでコンパイル、実行 してみたところ、1台のみ異なる誤った結果が出てしまいます。 おかしなPCのコンパイラを再インストールもしてみたのですが、結果は変わりません。 何なんでしょうね・・・
お礼
ご指摘ありがとうございます。 4台ともwindowsXPです。 おかしなPCは先日spywareが いたのでspybottで駆除したのですが、 必要なファイルを削除したとか 何か関係ありますかね・・・? コンパイラはその後、再インストールしてみたのですが変化なしです。