2009-07-02 8 views
4

私は4.1.2を使用しています。誰も私のコードの中で最も見栄えの良いアイデアを持っていますか?一般的な原因の経験ですか?いくつかの醜いポインタキャスト(つまり、d =(double)(*(float *)p)ですが、ここでpはintへのポインタです)、私は取り組んでいますが、まだ運はありません。
価値があるのは、-O0が正しい答えを出していることです。助けてくれてありがとう。GCCは-O0と-O2で異なる数値結果を与えます

+3

最小(非)動作例を提供できますか? – Gyom

+0

-Wallと-Wextraでコンパイルしていますか? –

+0

申し訳ありません、私はそれに取り組んでいます。重くなる。 –

答えて

7

私はここに示されたように、厳格なエイリアシングの問題を確認したい: http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html

あなたのコードはまったく同じものを知らなくても、の言及私容疑者エイリアシングの問題を作る「醜いポインタがキャスト」。

問題を実証したコードを提供した場合は、お手数をおかけしてお答えしやすくしてください。

+0

投稿はhttp://stackoverflow.com/questions/83962/do-i-have-a-gcc-optimization-bug-or-ac-code-problemにも同様のプロブレンが表示されます – an0nym0usc0ward

+0

。不良行は *(p1 + dcb.ntrc_hdr + r * NTW + t)= *(int *)&ftmp; –

3

皆さん、ありがとうございます。-fno-strict-aliasing(複数提案)は私の問題を解決しました。あなたのすべての協力に感謝します。
習得済みのこと:警告フラグ付きで常にコンパイルしてください。

+1

スタックオーバーフローはフォーラムではありません。回答は、投票や編集などの理由で並べ替えられるため、他の回答への返信には使用しないでください。コメントを残すか、質問を編集してください。また、回答が原因で問題が解決された場合は、それを承認済みとしてマークしてください(投票カウンタの下の緑のチェックマークをクリックしてください)。役に立つ回答を投票することを忘れないでください! – ephemient