グラフにパスを見つけて累積ウェイトを出力するプログラムがあります。グラフのすべての辺は、小数点以下2桁までの浮動小数点形式で0〜100の個々のウェイトを持ちます。0 + 0 + 0 ... + 0!= 0
Windows/Visual Studio 2010では、0ウェイトのエッジからなる特定のパスに対して、正しい合計ウェイトを出力します。ただし、Linux/GCCでは、パスのウェイトは2.35503e-38
です。私は浮動小数点によって引き起こされたクレイジーバグの経験は豊富ですが、0 + 0は0以外のものと等しくなるでしょうか?
これは私が考えることができるのは、プログラムがいくつかの重みを整数として扱い、暗黙の強制を使って合計に加算するということだけです。しかし、0 + 0.0fはまだ0.0fに等しい! クイックフィックスとして、私は0.00001より少なくても合計を0に減らし、これは私のニーズには十分です。しかし、どのようなvodooがこれを引き起こしますか?
注:詳述する: Iグラフの重みのいずれもが私はこの範囲を超えていないと、この特定の経路における重みの全てが全て0
EDITであることをことを100%確信私は、ファイルからウェイトを読み込み、それらをコードに手動で0.0fに設定することを試みました。これらのウェイトを合計に追加する以外の操作は実行されていません。
最小のテストケースを構築できますか? –
@OliCharlesworthそれは私がやろうとしてきたことです、これまでは運がありません。関連するコードの量はあまりに多いですが、私はより小さな範囲でバグを再現しようとし続けます。この背後には明らかな理由があることを期待していました。 –
マシンイプシロンの定義を調べることをお勧めします。これはここであなたのエラーの原因となっているようです。 – andre