2012-12-11 35 views
4

需要在matlab和一些DLL函數之間來回傳遞一些數據,有一點非常重要,那就是我們不知道matlab中NaN的確切數值,所以會有一些不必要的數據處理來考慮這些值。matlab中NaN的確切值是什麼?

有沒有人知道在MATLAB中NaN的確切值或至少值的範圍?

我最興趣知道以下兩種類型的靈長類動物:

(1)的NaN浮法(32);

(2)NaN雙倍(64)。

回答

6

根據Mathwork's documentation,NaN返回Not-a-Number的IEEE算術表達式。 NaN總是處於浮點表示形式(float或double) - 我不相信有一個整數NaN。

在IEEE 754中,NaN被表示爲浮點數,其中所有指數位設爲1,小數部分爲非零值(因此實際上有許多表示通用NaN的方法)。請參閱「特殊值」here

手工測試NaN最可靠的方法不是查找特定值,而是測試所有指數位已設置且小數部分不爲零。

+0

非常感謝,這是最有幫助的,順便說一句,在C/C++,這是最快的方法檢查x是否是NaN?調用函數_isnan()或類似的東西x!= x? – user0002128

+0

我會使用函數而不是'x!= x'。另見http://stackoverflow.com/a/2123781/855026 –

4

您可以使用format hex來檢查MATLAB使用的特定NaN的位模式。

>> 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