晶圆厂(-1.#IND000000000000)返回-1.#IND000000000000

fabs(-1.#IND000000000000) return -1.#IND000000000000?

本文关键字:#IND000000000000 返回 圆厂      更新时间:2023-10-16

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

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。

发布一些评论并投反对票然后删除评论的人,你的行为就像把任何你不理解的东西都当作坏事,把自己当作无所不知的人。

相关文章:
  • 没有找到相关文章