dポイントプレゼントキャンペーン実施中!

C言語でプログラムを作成して簡単な計算(ヒストグラムの平均値計算)をしているのですが、
使用するPCによって、異なる結果が出てしまいます。

コンパイラ(gcc)のバージョンも同じだし、計算に使用するデータも同じなので、原因が全くわかりません。特にランダム変数とか使っているわけでもありませんし・・・

どなたか、同じようなご経験をお持ちの方、原因が推測できるかた教えてください。

A 回答 (6件)

おそらく、#2さんがおっしゃられるように、ヒストグラムを作成する際に、度数を入れておく配列、もしくは平均を出すために合計を入れておく変数のいずれかが0に初期化されていないのが原因だと思います。



異なる結果というのが、小数点以下のレベルで異なる値なのか、見当はずれの値が出るのか、正しい結果が出ることがあるのかなどを示してもらえれば、解決が早いと思います。

#ソースを載せてもらえたら一番早いんですけどね。
    • good
    • 0

計算時の値の丸め誤差が起きているのかもしれません。


これは小数点の値が正確に計算されない現象のことで、
原因はコンピューターは2進数で値を管理する為です。
もし、小数点の計算をしているのならこの丸め誤差が影響している可能性はあります。
この問題のコンピューターを使っている以上解決法はありません。
    • good
    • 0

自動変数やmallocで割り付けたメモリブロックの初期化を忘れているとかではありませんか?



あるいは、環境変数やレジストリに依存する処理が含まれているとか...
    • good
    • 0

4台とも同じ処理系ですか?



処理系が違うのであれば、INT型の演算で1台だけ
オーバーフローしたりするって可能性も考えられそうです。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
4台ともwindowsXPです。

おかしなPCは先日spywareが
いたのでspybottで駆除したのですが、
必要なファイルを削除したとか
何か関係ありますかね・・・?

コンパイラはその後、再インストールしてみたのですが変化なしです。

お礼日時:2005/03/30 15:23

> 全く同じプログラムを4台のPCでコンパイル、実行


> してみたところ、1台のみ異なる誤った結果が出てしまいます。

正常なPCで作成した実行形式をおかしなPCに持ってきた場合は?

良くあるのは、配列を確保した際の配列の内容の初期値は未定義なので初期化しないと正しく動作しないのですが、3台のPCではたまたま0とか都合の良い数字で初期化されて、誤って正常動作のように見えてしまうとか。
    • good
    • 0
この回答へのお礼

なるほど、同じ実行形式ファイルで
確認する必要もありますね。
試してみます!

ありがとうございます。

お礼日時:2005/03/30 15:18

まずは、


1 1 1 1 …
などの結果の分かりきった単純なデータを使って、正しく計算されているか?
結果が違うのならどちらが違うか?

あたりから調べてみては?
    • good
    • 0
この回答へのお礼

早速回答いただきまして、ありがとうございます。
全く同じプログラムを4台のPCでコンパイル、実行
してみたところ、1台のみ異なる誤った結果が出てしまいます。

おかしなPCのコンパイラを再インストールもしてみたのですが、結果は変わりません。

何なんでしょうね・・・

お礼日時:2005/03/30 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!