需要在matlab和一些DLL函數之間來回傳遞一些數據,有一點非常重要,那就是我們不知道matlab中NaN的確切數值,所以會有一些不必要的數據處理來考慮這些值。matlab中NaN的確切值是什麼?
有沒有人知道在MATLAB中NaN的確切值或至少值的範圍?
我最興趣知道以下兩種類型的靈長類動物:
(1)的NaN浮法(32);
(2)NaN雙倍(64)。
需要在matlab和一些DLL函數之間來回傳遞一些數據,有一點非常重要,那就是我們不知道matlab中NaN的確切數值,所以會有一些不必要的數據處理來考慮這些值。matlab中NaN的確切值是什麼?
有沒有人知道在MATLAB中NaN的確切值或至少值的範圍?
我最興趣知道以下兩種類型的靈長類動物:
(1)的NaN浮法(32);
(2)NaN雙倍(64)。
根據Mathwork's documentation,NaN
返回Not-a-Number的IEEE算術表達式。 NaN總是處於浮點表示形式(float或double) - 我不相信有一個整數NaN。
在IEEE 754中,NaN被表示爲浮點數,其中所有指數位設爲1,小數部分爲非零值(因此實際上有許多表示通用NaN的方法)。請參閱「特殊值」here。
手工測試NaN最可靠的方法不是查找特定值,而是測試所有指數位已設置且小數部分不爲零。
您可以使用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
非常感謝,這是最有幫助的,順便說一句,在C/C++,這是最快的方法檢查x是否是NaN?調用函數_isnan()或類似的東西x!= x? – user0002128
我會使用函數而不是'x!= x'。另見http://stackoverflow.com/a/2123781/855026 –