2017-02-08 2 views
-4

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?

+0

-Нан, зачем голосовать? –

+0

Прошу прощения, но если вы не поняли, можете ли вы подождать, когда кто-нибудь знает об этом, чтобы ответить? –

+1

Нет такой вещи, как -NaN. Это то же самое, что и NaN. Если, конечно, вы не включили '-ffast-math'; то все виды вещей выбрасываются. Пытается делать математические вещи на чем-то, что является буквально ** N ** ot ** ** ** N ** umber не даст ожидаемых результатов. –

ответ

0

После некоторых больше поиска в Интернете, я получаю эти выводы:

IEEE-754 определено NAN, старший бит может быть знаком или без знака. Он не определяет -NAN.

Microsoft определила как NAN, так и NAN.

С помощью cppreference.com функция fabs: Если аргумент NaN, возвращается NaN.

По MSDN фабрики возвращают абсолютное значение своего аргумента. Возврат ошибки отсутствует. Но при вводе ± QNAN или IND, для параметра Matherr Exception установлено значение _DOMAIN.

Благодарим вас, @QPaysTaxes, @Sneftel, @Cubbi.

Парень, который публикует некоторые комментарии и нижестоящие комментарии, а затем удаляет комментарий, вы походите на то, что считаете плохой, и относитесь к себе как к знанию.