CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
Как известно, не-x86-ое железо - это миф, придуманный эпплом, чтобы продавать больше маков. )))

Но вдруг у вас сейчас под рукой имеется это самое мифическое не-x86-ое железо с Си-компилятором на нём?
Тогда посчитайте, пожалуйста, что получится, если "скастовать" NaN к целому типу?

#include <stdio.h>

int main()
{
double x = 0.0/0.0; // NaN
printf("%lx\n",(long)x);
return 0;
}


На x86-железе конвертация происходит через x87 FPU (в полном соответствии с Intel-овской спецификацией) и получается MIN_INTEGER (пишет на экране 8000000000000000)
А что происходит на другом железе? Какие значения там могут получиться?

Обратите внимание, что если выражение (long)NaN будет вычисляться в момент компиляции, то ответ может быть численно другой (напр., gcc в таких случаях ставит 0)!
Интересует значение, которое получается именно в рантайме на разном железе.
Возможно, придётся поставить volatile или как-то по-другому отключить оптимизацию.

Также стоит на всякий случай обратить внимание, что (long)NaN это совсем не то же самое что *(long*)(&NaN) - получаются разные численные результаты.
В первом случае действует некоторая нетривиальная логика, не фиксированная стандартом языка Си,
а во втором случае получаем вполне ожидаемое битовое представление плавучки согласно IEEE 754.

Что у вас есть под рукой? Мак, роутер, андроид? Попробуйте.

@темы: C++, NaN, Вопрос, железо