2009-05-08 16 views
11

最近、アプリケーションからデータをエクスポートすると(まれに)、エクスポートログに "-1。#J"のような浮動小数点値が含まれることがあります。私はそれを再現することができませんでしたので、浮動小数点がバイナリでどのように見えるか、またはVisual Studioがそれをどのように表示するかはわかりません。浮動小数点エラー-1。#Jはどういう意味ですか?

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

私はグーグルで試してみましたが、グーグルはどんなに離れています。フロートエラーのリストは見つかりません。

+0

も参照してください:http://stackoverflow.com/questions/5541975/what-does-1-mean/5542066#5542066 –

答えて

27

負の無限大またはNaN(数値ではない)のいずれかになります。フィールドの書式設定のため、printfはそれらを区別しません。

私は、Visual Studio 2008で、次のコードを試してみました:次のような出力になり

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

:0.3の書式指定子を削除

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

ができます:

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

0/0はNaNを与え、-1/0は負の無限大を与えます(NaN、-inf、+ infは唯一の "er私が正しく思い出した場合には、「無理な」浮動小数点数)

+0

興味深い...私はなぜそれが終わるのだろうか?無限大/ NaNインジケータを切り捨てるときに 'J'を使用しますか? –

+14

Jは、「数字」INを1つ少ない場所に丸めた結果です。 – RBerteig

+3

NaNとINFを先頭の数字とドットのあるコードに変換すると、IMHOは重大な間違いです。テキストファイルの数値フィールドで終わるのは簡単すぎます。これは、(不完全ではありますが確かにパーサーではありませんが、確かにパーサーではありませんが)+1または-1という値で印刷されます。 +#INF、 - #INFなどと書く方がはるかに良いでしょう。 – RBerteig

関連する問題