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