C++ 晶圆厂(-1.#IND000000000000)返回-1.#ind000000000000000000?
编辑:要复制它,请使用这段代码C++ 晶圆厂(-1.#IND000000000000)返回-1.#ind000000000000000000?,c++,visual-studio,nan,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; 编辑:我不同意这个重复的另一个问题,sqrt和abs是绝对不同的功能。当您向sqrt发送负值时,它可能会给您-Nan,但对于abs,它应该给您Nan 我正在使用VS2013。计算函数返回-1.#IND00000
union
{
double d;
size_t s;
} d;
d.s = 0xfff8000000000000;
d.d = fabs(d.d);
std::cout << d.d << std::endl;
编辑:我不同意这个重复的另一个问题,sqrt和abs是绝对不同的功能。当您向sqrt发送负值时,它可能会给您-Nan,但对于abs,它应该给您Nan
我正在使用VS2013。计算函数返回-1.#IND000000000000(十六进制0xfff8000000000000)
,这应该意味着Visual studio中的-Nan,我使用fabs()获得它的abs值,它仍然给我-1.#ind000000000000000000。我尝试使用std::abs并得到相同的结果
double x = some_function(...); // return -1.#IND000000000000
x = fabs(x);
// or
x = std::abs(x);
在本文中只提到了fabs(-INF)=INF,而没有提到NAN或IND。这是一个未定义的行为,还是visual studio 2013中的一个bug 在互联网上进行了更多的搜索之后,我得到了以下结论: IEEE-754定义了NAN,高位可以是有符号的,也可以是无符号的。它没有定义-NAN Microsoft同时定义了NAN和-NAN 通过cppreference.com,fabs函数:如果参数为NaN,则返回NaN 根据MSDN,fabs返回其参数的绝对值。没有错误返回。但当输入为±QNAN或IND时,Matherr异常设置为_域 谢谢大家,@QPaysTaxes,@Sneftel,@Cubbi
发表评论并投否决票的人会删除评论,你的行为就像对待任何你不了解的东西都是坏的,对待自己是无所不知的。-Nan,为什么要投否决票?很抱歉,如果你不清楚,你能等知道的人回答吗?没有-Nan这样的东西。这和南是一样的。当然,除非您启用了
-ffast math
;然后各种各样的东西都被扔掉了。尝试对一些实际上不是数字的东西进行数学运算不会得到预期的结果。我不确定这个值是如何得到的,它来自外部库方法,在visual studio debug中显示为-1。1.#IND000000000000是Nan,那么这个必须是-Nan。我没有使用-ffast数学选项,但不确定库是否启用了它。不,它不是-NaN。只是楠。有几种表示法,其中一些可能恰巧看起来像另一种表示法的否定版本,但它们在IEEE标准下都是相同的,并且被数学库以同样的方式对待——也就是说,不可预测和奇怪。
double x = some_function(...); // return -1.#IND000000000000
x = fabs(x);
// or
x = std::abs(x);