2017-09-07 5 views
3

Ich bin eine 64bit Festkommazahl auf Fließkomma. Wie sollte das in Matlab gemacht werden? Der folgende Code gibt unterschiedliche Ergebnisse. Was ist der Unterschied zwischen Typumwandlung und Doppel (x)Matlab Double Cast von Uint64

temp = 2^32*uint64(MSB) + uint64(LSB); 
out_0(1, 1) = typecast(temp, 'double'); 
out_1(1, 1) = double(temp); 

Ein Beispiel:

temp = 4618350711997530112 

data = typecast(temp, 'double') 

data = 

    5.9194 

>> double(temp) 

ans = 

    4.6184e+18 
+0

bekomme ich das gleiche mit typecast oder double! – hello123

+0

@emanbap Sie müssen sicherstellen, dass temp Uint64 ist. – user1876942

Antwort

5

Wenn Sie die gleiche Zahl halten wollen, sollten Sie auf jeden Fall double verwenden es zu konvertieren:

double In doppelte Genauigkeit konvertieren.
double(X) gibt den doppelten Genauigkeitswert für X zurück.

Während typecast hält die interne Darstellung, das heißt die Bytes gleich gehalten oder aber anders interpretiert:

Convert Datentypen ohne Änderung der zugrundeliegenden Daten typisieren.
Y = typecast(X, DATATYPE) konvertieren X zu DATATYPE. Wenn DATATYPE hat
weniger Bits als die Klasse von X, Y wird mehr Elemente als X haben, wenn
DATATYPE mehr Bits als die Klasse von X hat, wird Y weniger
Elemente als X. haben

Beachten Sie, dass typecast nur dann verwendet werden kann, wenn die Anzahl der Bytes gleich ist. Dies gilt nicht für double, da versucht wird, die gleiche Zahl so genau wie möglich in doppelter Genauigkeit darzustellen. Sie können beispielsweise uint32 nicht in double eingeben, aber Sie können zwei uint32 in eine double Nummer eingeben. Wenn Sie double verwenden, um es zu konvertieren, erhalten Sie jeweils ein und zwei Doppel.

C++ Äquivalent

X = double(uint64(123));
=>int64_t x = 123; double X = x;

X = typecast(uint64(123), 'double')
=>int64_t x = 123; double X = reinterpret_cast<double>(x);

+1

oder 'double (x)' ist das gleiche wie 'static_cast (x)'. – rahnema1

1

Darüber hinaus, weil es scheint, Sie haben zwei 32-Bit-uint-Werte MSB und LSB; Um sie in uint 64 zu konvertieren, können Sie typecast verwenden.

U = typecast([MSB,LSB],'uint64') 

Dann Umwandlung von m7913d

D = double(U) 

wie vorgeschlagen verdoppeln Sie sehen also typecast eine ganz andere Funktion double verglichen hat.