2016-07-28 54 views
1

的代碼中有一行:倍頻程楠功能我在讀「單」

someData = nan(3, 4, 5, "single") 

我無法找到的「南」函數的文檔,但似乎這個代碼來生成一個3x4x5 NaN基質。但是,我不知道「單身」是什麼。用一個隨機的其他字符串取代「錯誤:NaN:無效的數據類型指定」,並用「double」取代它會得到相同的結果。 「單身」的功能是什麼?

+0

關於nan的文檔可以在這裏找到http://se.mathworks.com/help/matlab/ref/nan.html,你可以在這裏找到關於數據類型的信息https://en.wikipedia。 org/wiki/Data_type – patrik

+0

你是什麼意思,你不能找到'nan'函數的文檔?你只需在Octave提示符下鍵入'help nan'。這是記錄在那裏:「可選參數CLASS指定返回類型,可能是」雙「或」單「」。 – carandraug

+0

呵呵,爲什麼不是大寫敏感? –

回答

4

它使nan的矩陣結果爲single-precision data type,它包含單精度浮點數。如果你想單精度,你需要明確指定,否則默認情況下Octave和MATLAB將使用雙精度。

您可以使用class檢查輸出的類別。

class(nan(3, 4, 5, 'single')) 
% 'single' 

class(nan(3, 4, 5)) 
% 'double' 

至於長得一模一樣,他們,直到你開始嘗試存儲超過可以用單精度浮點表示來表示數字的範圍內的數字看起來是一樣的。這是因爲單精度數使用雙精度數的一半內存量。

a = nan(1, 1, 'single'); 
a(1) = 1e-64 
% 0 

b = nan(1, 1); 
b(1) = 1e-64 
% 1.000e-64 

此外,如果我們考察的變量與whos我們可以確認的大小差異。

a = nan(1,1,'single'); 
b = nan(1,1) 
whos('a', 'b') 

% Variables in the current scope: 
% 
%  Attr Name  Size      Bytes Class 
%  ==== ====  ====      ===== ===== 
%   a   1x1       4 single 
%   b   1x1       8 double 
+0

你應該補充說'whos'將顯示不同的矩陣大小,因爲單個內存使用的內存少於double。 – patrik