Во-первых, NAN - это все, что не считается числом с плавающей запятой согласно стандарту IEEE. Так что может быть несколько вещей. В компиляторе, с которым я работаю, есть NAN и -NAN, поэтому речь идет не только об одном значении.
Во-вторых, у каждого компилятора есть свой isnan
набор функций для проверки в этом случае, поэтому программисту не нужно иметь дело с битами самому. Подводя итог, я не думаю, что просмотр стоимости имеет какое-либо значение. Вы можете взглянуть на значение, чтобы увидеть его конструкцию IEEE, такую как знак, мантисса и экспонента, но, опять же, каждый компилятор предоставляет свои собственные функции (или, лучше сказать, библиотеку) для работы с ним.
Однако мне есть что сказать о вашем тестировании.
float h = NAN;
printf("%x %d\n", (int)h, (int)h);
Приведение, которое вы выполнили, преобразует float в int. Если вы хотите получить целое число, представленное числом с плавающей запятой, выполните следующие действия.
printf("%x %d\n", *(int *)&h, *(int *)&h);
То есть вы берете адрес числа с плавающей запятой, затем называете его указателем на int и в конечном итоге принимаете значение int. Таким образом, битовое представление сохраняется.
person
Israel Unterman
schedule
28.04.2012