4

需要在matlab和一些DLL函数之间来回传递一些数据,有一点很突出,就是我们不知道matlab中NaN的确切数值,所以会有一些不必要的数据处理来考虑这些值。

有谁知道matlab中NaN的确切值或至少值的范围?

我最感兴趣的是了解以下两种原始类型:

(1) 浮点数 (32) 的 NaN;

(2) 双 (64) 的 NaN。

4

2 回答 2

6

根据Mathwork 的文档NaN返回非数字的 IEEE 算术表示。NaN 始终采用浮点表示(浮点或双精度) - 我不相信有整数 NaN。

在 IEEE 754 中,NaN 表示为浮点数,所有指数位设置为 1,小数部分为任何非零值(因此实际上有多种表示一般 NaN 的方法)。请参阅此处的“特殊值” 。

手动测试 NaN 的最可靠方法不是查找特定值,而是测试所有指数位都已设置且小数部分非零。

于 2012-12-11T04:19:32.073 回答
4

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
于 2012-12-11T07:57:16.537 回答