Когда я отлаживал код, я обнаружил, что GCC и Clang дают уроки nan для 0.0/0.0
, чего я ожидал, но GCC дает нано с битом знака, установленным в 1, а Clang устанавливает его в 0 (в согласие с ICC, если я правильно помню).
Теперь очевидно, что обе формы разрешены, но я продолжаю задаваться вопросом, почему 0.0/0.0
сделает вывод GCC "отрицательным" результатом (печать дает -nan
), а -(0.0/0.0)
дает "положительный" результат? Еще более запутанным является то, что -0.0/0.0
снова "отрицательный". Это постоянная складчатая странность?
изменить
Собственно, это постоянное сгибание, которое делает его положительным наном. Если я вынужу вычисление во время выполнения, я получаю отрицательный нан как на GCC, так и на Clang
volatile float zero = 0.0;
std::cout << (zero/zero); // -nan
Может кто-нибудь рассказать об этом, пожалуйста? Является ли бит знака установлен равным 1 на FPU x86?