在VBA/VB6中测试NaN

Abi*_*iel 5 vb6 vba

使用VBA我将一个8字节的浮点数从一个字节数组加载到一个Double中.一些数字将是IEEE 754 NaN(即如果您尝试使用Debug.Print打印它,您将看到1.#QNAN).我的问题是,如何测试Double中包含的数据是否是NaN而不是常规数字?

谢谢.

Jim*_*ack 9

NaN在指数中有一个模式,当它们仍然在字节数组中时,你可以识别它.具体来说,任何NaN都将具有全1的指数,任何无穷大也是如此,你可能也应该陷阱.

在double中,指数是最高位的两个字节:

 SEEEEEEE EEEEMMMM MMM....
Run Code Online (Sandbox Code Playgroud)

假设那些是b(0)和b(1):

  Is_A_Nan = ((b(0) And &H7F) = &H7F) And ((b(1) And &HF0) = &HF0)
Run Code Online (Sandbox Code Playgroud)

这是空气代码,但你明白了.

如果您需要区分SNaN,QNaN和Infinity,您需要更深入地观察,但这对您来说并不是一个问题.