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