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定義された、高ビットは符号付きまたは符号なしすることができます。
- いいえ、なぜ投票を停止しますか? –
申し訳ありませんが、あなたが明確でない場合は、誰かが回答するのを知って待つことができますか? –
-NaNのようなものはありません。これはNaNと同じことです。もちろん、あなたは '-fast-math'を有効にしない限り、あらゆる種類のものが投げ捨てられます。かなり文字通り** N ** o ** ** ** ** N ** umberである何かに数学的なことをしようとすると、あなたは期待された結果を得ることができません。 –