14

ソフトウェア フローティング エミュレーション (ハードウェア浮動小数点が無効) をサポートする 32 ビットの powerpc カーネルで以下の C++ プログラムを実行すると、条件付き評価が正しくありません。ここで潜在的な問題は何ですか?

#include <stdio.h>

int main() {
   int newmax = 1;
   if ((newmax + 0.0) > 256) {
       printf("\nShouldn't be here\n");
   } else {
       printf("\nShould be here\n");
   }
}

コンパイル:

powerpc-linux-g++ -msoft-float -c floating.cxx
powerpc-linux-g++  -o floating floating.o

ターゲット システムでの出力:

[linux:/]$ ./floating
Shouldn't be here
4

4 に答える 4

1

リンク時にも -msoft-float を指定する必要があります。 -S フラグを使用して逆アセンブリを提供してください。

于 2013-05-22T11:36:43.013 に答える
-1

コード内のステートメント newmax + 0.0 は float または double で結果を生成しますが、整数値と比較されます。

したがって、このエラー。

これを試して、

int i=1;
printf("%d",(i+0.0));

i の値に関係なく、毎回結果が 0 になります。一方、

int i=1;
printf("%f",(i+0.0));

これは 1.0000 を生成します

于 2013-06-27T05:53:28.720 に答える