需要在matlab和一些DLL函数之间来回传递一些数据,有一点很突出,就是我们不知道matlab中NaN的确切数值,所以会有一些不必要的数据处理来考虑这些值。
有谁知道matlab中NaN的确切值或至少值的范围?
我最感兴趣的是了解以下两种原始类型:
(1) 浮点数 (32) 的 NaN;
(2) 双 (64) 的 NaN。
根据Mathwork 的文档,NaN
返回非数字的 IEEE 算术表示。NaN 始终采用浮点表示(浮点或双精度) - 我不相信有整数 NaN。
在 IEEE 754 中,NaN 表示为浮点数,所有指数位设置为 1,小数部分为任何非零值(因此实际上有多种表示一般 NaN 的方法)。请参阅此处的“特殊值” 。
手动测试 NaN 的最可靠方法不是查找特定值,而是测试所有指数位都已设置且小数部分非零。
NaN
您可以使用 . 检查特定MATLAB 使用的位模式format hex
。
>> format hex
>> NaN
ans =
fff8000000000000
>> single(NaN)
ans =
ffc00000
如果您真的想要,您可以使用 构建其他 NaN typecast
,如下所示:
>> format long
>> otherNan = typecast( 1 + typecast( single(NaN), 'int32' ), 'single' )
otherNan =
NaN
>> isnan(otherNan)
ans =
1
>> format hex
>> otherNan
otherNan =
ffc00001