1

線形代数を使用してカラー スペクトルを計算するレガシー コードをコンパイルしています。行列は型として float を使用し、すべての計算は float を使用します。古いコンパイラ (turbo-linux gcc 2.95) を使用すると、1 つの答えが得られます。新しいコンパイラ (SuSE gcc 4.3.2) を使用すると、異なるスペクトルが得られます。

古いコンパイラを使用した出力と一致するように、新しいコンパイラを使用してコンパイルされた同じプログラムの出力を取得する必要があります。

これらのコンパイラ オプションを使用してみました: g++ -g -lstdc++ -mfpmath=no-sse -mno-sse -mno-sse2 -float-store -mieee-fp

そしてこのコード:

volatile unsigned short int cw;
__asm__ volatile("fstcw %0" : "=m" (*&cw));
printf("floating point control word was: %x\n",cw);
cw=0x027f;
__asm__ volatile("fldcw %0" :: "m" (*&cw));
    printf("floating point control word  now is: %x\n",cw);

これのどれも、色スペクトルを一致させることができませんでした。

問題は、2 つの異なるコンパイラからコンパイルされたコードから得られるカラー スペクトルを一致させるための特効薬があるかどうかです。浮動小数点制御幅 (上記の flpcw) が解決策になることを望んでいましたが、そうではありませんでした。(コードが複雑すぎて投稿できないことに注意してください)。

PS 上記のコードの結果: gcc 2.95 浮動小数点制御ワード: 0x37f 浮動小数点制御ワードは 0x27f になりました。

gcc 4.3.2 の浮動小数点制御ワード: 0x37f 浮動小数点制御ワードが 0x27f になりました。

4

0 に答える 0