使用VBA我将一个8字节的浮点数从一个字节数组加载到一个Double中.一些数字将是IEEE 754 NaN(即如果您尝试使用Debug.Print打印它,您将看到1.#QNAN).我的问题是,如何测试Double中包含的数据是否是NaN而不是常规数字?
谢谢.
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,您需要更深入地观察,但这对您来说并不是一个问题.