14

最近、(まれに)アプリケーションからデータをエクスポートするときに、エクスポートログに「-1.#J」のようなfloat値が含まれることがあります。再現できなかったので、フロートがバイナリでどのように表示されるか、またはVisualStudioでどのように表示されるかわかりません。

printfのソースコードを調べてみましたが、何も見つかりませんでした(ただし、正しいバージョンを調べたとは限りません...)。

私はグーグルを試しましたが、グーグルは#を捨てます、それはそうです。そして、フロートエラーのリストが見つかりません。

4

1 に答える 1

29

負の無限大またはNaN(数値ではない)のいずれかです。フィールドのフォーマットにより、printfはそれらを区別しません。

VisualStudio2008で次のコードを試しました。

double a = 0.0;
printf("%.3g\n", 1.0 / a);  // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a);    //  NaN

その結果、次の出力が得られます。

1.#J
-1.#J
-1.#J

.3フォーマット指定子を削除すると次のようになります。

1.#INF
-1.#INF
-1.#IND

したがって、0/0がNaNを与え、-1 / 0が負の無限大を与えることは明らかです(正しく思い出せば、NaN、-inf、および+ infが唯一の「誤った」浮動小数点数です)

于 2009-05-08T15:27:09.100 に答える