2017-02-08 1 views
-4

EDIT:これを再現するには、このコードを使用します。fabs(-1。#IND000000000000)は-1を返します。#IND000000000000?

union 
{ 
    double d; 
    size_t s; 
} d; 

d.s = 0xfff8000000000000; 
d.d = fabs(d.d); 
std::cout << d.d << std::endl; 

出力は

-1.#IND 

EDITです:私はSQRT、これは他の質問を重複同意しないとABSは絶対異なる機能です。あなたがsqrtに負の値を送るとき、それはあなたに-Nanを与えるかもしれませんが、absのために、あなたにNanを与えるべきです。

私はVS2013を使用しています。計算関数は-1。#IND000000000000(hex 0xfff8000000000000) を返します。これはビジュアルスタジオで-Nanを意味し、fabs()を使用してabs値を取得しますが、それでも-100000000000000になります。私はstd :: absを使い、同じ結果を得ます。 http://en.cppreference.com/w/cpp/numeric/math/fabs

double x = some_function(...); // return -1.#IND000000000000 
x = fabs(x); 
// or 
x = std::abs(x); 

それのみ言及ファブ(-INF)= INF、NANまたはINDについて何。これは未定義の動作か、Visual Studio 2013のバグですか?

IEEE-754 NAN定義された、高ビットは符号付きまたは符号なしすることができます。

+0

- いいえ、なぜ投票を停止しますか? –

+0

申し訳ありませんが、あなたが明確でない場合は、誰かが回答するのを知って待つことができますか? –

+1

-NaNのようなものはありません。これはNaNと同じことです。もちろん、あなたは '-fast-math'を有効にしない限り、あらゆる種類のものが投げ捨てられます。かなり文字通り** N ** o ** ** ** ** N ** umberである何かに数学的なことをしようとすると、あなたは期待された結果を得ることができません。 –

答えて

0

は、いくつかのより多くのインターネットで検索した後、私はこれらの結論を得ます。 -NANは定義されていません。

Microsoftは、NANと-NANの両方を定義しました。

cppreference.comでfabs関数:引数がNaNの場合、NaNが返されます。

MSDNによって、fabsは引数の絶対値を返します。エラーリターンはありません。しかし、入力が±QNANまたはINDの場合、Matherr Exceptionは_DOMAINに設定されます。

ありがとう、@ QPaysTaxes、@Sneftel、@Cubbi。

コメントを投稿してダウンボートしてコメントを削除した人は、あなたが悪いとは思わないものを扱い、知っているように自分自身を扱うような行動をします。

関連する問題