我正在将64位定点数转换为浮点数。应该如何在Matlab中完成?以下代码给出了不同的结果。 typecast和double(x)
之间有什么区别temp = 2^32*uint64(MSB) + uint64(LSB);
out_0(1, 1) = typecast(temp, 'double');
out_1(1, 1) = double(temp);
一个例子:
temp = 4618350711997530112
data = typecast(temp, 'double')
data =
5.9194
>> double(temp)
ans =
4.6184e+18
答案 0 :(得分:6)
如果您想保持相同的数字,请务必使用double
进行转换:
double
转换为双精度。
double(X)
返回X
的双精度值。
typecast
维护内部表示,即字节保持相同但不同的解释:
类型转换转换数据类型而不更改基础数据
Y = typecast(X, DATATYPE)
将X转换为DATATYPE。如果DATATYPE有 比X类更少的比特,Y将具有比X更多的元素。如果
DATATYPE具有比X类更多的位,Y将具有更少的数量 元素比X。
请注意,只有当字节数相同时才能使用typecast
,而double
则不然,因为它试图在双精度中表示尽可能接近的相同数字。例如,您无法将uint32
类型转换为double
,但您可以将两个uint32
类型转换为一个double
个数字。如果您使用double
进行转换,您将分别获得一个和两个双打。
C ++等效
X = double(uint64(123));
=> int64_t x = 123; double X = x;
X = typecast(uint64(123), 'double')
=&GT; int64_t x = 123; double X = reinterpret_cast<double>(x);
答案 1 :(得分:1)
此外,因为您似乎有两个32位uint值MSB
和LSB
;要将它们转换为uint 64,您可以使用类型转换。
U = typecast([MSB,LSB],'uint64')
然后按照m7913d
的建议转换为双倍D = double(U)
因此,与typecast
相比,double
功能有着非常不同的功能。