2016-07-28 14 views
1

Der Code lese ich hat eine Linie:Octave nan Funktion mit dem Argument „single“

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

Ich kann nicht in der Dokumentation für die „nan“ -Funktion finden, aber dieser Code erscheint ein 3x4x5 zu erzeugen Matrix von NaN. Ich weiß jedoch nicht, was "Single" macht. Ersetzen Sie es durch eine zufällige andere Zeichenfolge erhält "Fehler: NaN: ungültiger Datentyp angegeben", und ersetzt durch "Double" scheint das gleiche Ergebnis zu geben. Was ist die Funktion der "Single"?

+0

Die Dokumentation auf nan ist hier http://se.mathworks.com/help/matlab/ref/nan.html gefunden, und Sie können Informationen zu Datentypen hier https finden: //en.wikipedia. org/wiki/Data_type – patrik

+0

Was meinen Sie, Sie können die Dokumentation für die 'nan' Funktion nicht finden? Du tippst einfach "help nan" beim Octave Promp. Dies ist dort dokumentiert: "Das optionale Argument CLASS gibt den Rückgabetyp an und kann entweder" double "oder" single "sein. – carandraug

+0

Huh, warum ist es nicht Großschreibung-empfindlich? –

Antwort

4

Es macht die resultierende Matrix von nan eine Matrix, die der single-precision data type ist, die Gleitkommazahlen mit einfacher Genauigkeit enthält. Wenn Sie eine einfache Genauigkeit wünschen, müssen Sie dies explizit angeben, andernfalls verwenden Octave und MATLAB standardmäßig die doppelte Genauigkeit.

Sie können die Klasse der Ausgabe mit class überprüfen.

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

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

Soweit die gleichen sucht, sie wird gleich aussehen, bis Sie versuchen, Startnummern zu speichern, die den Zahlenbereich überschreiten, die mit einfacher Genauigkeit Gleitkommadarstellung dargestellt werden können. Dies liegt daran, dass Zahlen mit einfacher Genauigkeit die halbe Speichermenge verwenden, die doppelte Genauigkeitszahlen haben.

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

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

Auch wenn wir die Variablen mit whos inspizieren können wir die Größendifferenz bestätigen.

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

Sie sollten hinzufügen, dass 'whos' eine andere Größe der Matrix zeigt, da eine einzelne weniger Speicher als eine doppelte verwendet. – patrik