来自 Uint64 的 Matlab 双投

Matlab Double cast from Uint64

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

如果你想保持相同的数字,你一定要使用double转换它:

double Convert to double precision.
double(X) returns the double precision value for X.

typecast 保持 内部 表示,即字节保持相同但或不同的解释:

typecast Convert datatypes without changing underlying data.
Y = typecast(X, DATATYPE) convert X to DATATYPE. If DATATYPE has
fewer bits than the class of X, Y will have more elements than X. If
DATATYPE has more bits than the class of X, Y will have fewer
elements than X.

请注意,只有在字节数相同时才可以使用 typecast,而对于 double 则不适用,因为它会尝试尽可能接近地表示相同的数字双精度。例如,您不能将 uint32 类型转换为 double,但可以将两个 uint32 类型转换为一个 double 数字。如果用double转换,则分别得到一个和两个double。

C++ 等价物

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);

此外,因为您似乎有两个 32 位 uint 值 MSBLSB;要将它们转换为 uint 64,您可以使用类型转换。

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

然后按照 m7913d

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

所以你看到 typecastdouble 相比有一个非常不同的功能。