EDIT: воспроизвести его, использовать этот фрагмент кода.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
EDIT: Я не согласен с этим дублирует другой вопрос, SQRT и абс являются абсолютными различными функциями. Когда вы отправляете отрицательное значение в sqrt, оно может дать вам -Nan, но для abs это должно дать вам Nan.
Я использую VS2013. Функция вычисления возвращает -1. # IND000000000000 (hex 0xfff8000000000000) , что должно означать -Nan в Visual studio, и я использую 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 Упоминается только ФАБС (-INF) = INF, ничего о NAN или IND. Является ли это неопределенным поведением или ошибкой в visual studio 2013?
-Нан, зачем голосовать? –
Прошу прощения, но если вы не поняли, можете ли вы подождать, когда кто-нибудь знает об этом, чтобы ответить? –
Нет такой вещи, как -NaN. Это то же самое, что и NaN. Если, конечно, вы не включили '-ffast-math'; то все виды вещей выбрасываются. Пытается делать математические вещи на чем-то, что является буквально ** N ** ot ** ** ** N ** umber не даст ожидаемых результатов. –