Тестирование на NaN в VBA/VB6

Используя VBA я загружаю 8-байтовое число с плавающей точкой из массива байтов в Двойное. Некоторыми числами будет IEEE 754 NaN (т.е. при попытке распечатать его с Отладкой. Печать Вы будете видеть 1.#QNAN). Мой вопрос, как я могу протестировать, является ли данными, содержавшимися в Двойном, NaN в противоположность регулярному числу?

Спасибо.

5
задан Abiel 28 April 2010 в 16:45
поделиться

1 ответ

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, вам нужно посмотреть глубже, но похоже, что это не проблема для вас.

9
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: