Используя VBA я загружаю 8-байтовое число с плавающей точкой из массива байтов в Двойное. Некоторыми числами будет IEEE 754 NaN (т.е. при попытке распечатать его с Отладкой. Печать Вы будете видеть 1.#QNAN). Мой вопрос, как я могу протестировать, является ли данными, содержавшимися в Двойном, NaN в противоположность регулярному числу?
Спасибо.
NaN имеют шаблон в экспоненте, который вы можете идентифицировать, пока они все еще находятся в массиве байтов. В частности, любое NaN будет иметь показатель степени всех единиц, как и любая бесконечность, которую вам, вероятно, также следует уловить.
В double экспонента находится в старших двух байтах:
SEEEEEEE EEEEMMMM MMM....
Предположим, это b (0) и b (1):
Is_A_Nan = ((b(0) And &H7F) = &H7F) And ((b(1) And &HF0) = &HF0)
Это воздушный код, но вы поняли идею.
Если вам нужно различать SNaN, QNaN и Infinity, вам нужно посмотреть глубже, но похоже, что это не проблема для вас.