fabs(-1。#IND000000000000)返回-1。#IND000000000000?

时间:2017-02-08 22:36:05

标签: c++ visual-studio nan

编辑:要重现它,请使用这段代码。

union
{
    double d;
    size_t s;
} d;

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

输出

-1.#IND
编辑:我不同意这个重复的另一个问题,sqrt和abs是绝对不同的功能。当您向sqrt发送负值时,它可能会给你-Nan,但对于abs,它应该给你Nan。

我正在使用VS2013。计算函数返回-1。#IND000000000000(十六进制0xfff8000000000000) ,这应该意味着在Visual Studio中的-Nan,我使用fabs()来获得它的abs值,它仍然给我-1。#IND000000000000。我尝试使用std :: abs并获得相同的结果。

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

http://en.cppreference.com/w/cpp/numeric/math/fabs中它只提到了fabs(-INF)= INF,没有提及NAN或IND。这是一个未定义的行为,还是visual studio 2013中的一个错误?

1 个答案:

答案 0 :(得分:0)

经过互联网搜索后,我得出了以下结论:

IEEE-754定义了NAN,高位可以是有符号或无符号的。它没有定义-NAN。

Microsoft定义了NAN和-NAN。

通过cppreference.com,fabs函数:如果参数是NaN,则返回NaN。

通过MSDN,fabs返回其参数的绝对值。没有错误返回。但是当输入为±QNAN或IND时,Matherr Exception设置为_DOMAIN。

谢谢大家,@ QPaysTaxes,@ Sneftel,@ Cosbi。

发表评论并发表评论然后删除评论的人,你的行为就像对待任何你不理解的事情一样糟糕,并将自己视为知识渊博。