晶圆厂(-1.#IND000000000000)返回-1.#IND000000000000
fabs(-1.#IND000000000000) return -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
编辑:我不同意这重复了另一个问题,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中的错误?
在互联网上搜索更多后,我得到以下结论:
IEEE-754定义了NAN,高位可以是有符号的,也可以是无符号的。 它不定义 -NAN。
Microsoft定义了 NAN 和 -NAN。
通过 cppreference.com,fabs函数:如果参数为NaN,则返回NaN。
通过 MSDN,fabs 返回其参数的绝对值。没有错误返回。 但是当输入为 ±QNAN 或 IND 时,Matherr 异常设置为 _DOMAIN。
谢谢大家,@QPaysTaxes,@Sneftel,@Cubbi。
发布一些评论并投反对票然后删除评论的人,你的行为就像把任何你不理解的东西都当作坏事,把自己当作无所不知的人。
相关文章:
- 没有找到相关文章