グラフでパスを見つけて累積重みを出力するプログラムがあります。グラフのすべてのエッジは、小数点以下2桁までのフロート形式で、0〜100の個別の重みを持ちます。
Windows / Visual Studio 2010では、重みが0のエッジで構成される特定のパスに対して、正しい合計重み0が出力されます。ただし、Linux / GCCでは、プログラムはパスの重みが。であると言っています2.35503e-38
。私はフロートによって引き起こされたクレイジーなバグについて多くの経験をしましたが、0 + 0が0以外のものと等しくなるのはいつですか?
私が考えることができる唯一のことは、これを引き起こしているのは、プログラムが重みの一部を整数として扱い、暗黙の強制を使用してそれらを合計に追加することです。しかし、0 + 0.0fはまだ0.0fに等しいです!簡単な修正として、0.00001未満の場合は合計を0に減らします。今のところ、これで十分です。しかし、どのvodooがこれを引き起こしますか?
注:グラフ内のどの重みも前述の範囲を超えておらず、この特定のパスのすべての重みがすべて0であると100%確信しています。
編集:詳しく説明するために、ファイルから重みを読み取ることと、コードで重みを0.0fに設定することの両方を手動で試しました。合計に追加する以外に、他の操作は実行されていません。