来自Uint64的Matlab Double Cast

时间:2017-09-07 05:34:48

标签: matlab floating-point fixed-point

我正在将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

2 个答案:

答案 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值MSBLSB;要将它们转换为uint 64,您可以使用类型转换。

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

然后按照m7913d

的建议转换为双倍
D = double(U)

因此,与typecast相比,double功能有着非常不同的功能。