来自Uint64的Matlab Double Cast

use*_*942 4 floating-point matlab 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);
Run Code Online (Sandbox Code Playgroud)

一个例子:

temp = 4618350711997530112

data = typecast(temp, 'double')

data =

    5.9194

>> double(temp)

ans =

    4.6184e+18
Run Code Online (Sandbox Code Playgroud)

m79*_*13d 6

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

double转换为双精度.
double(X)返回双精度值X.

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

类型转换转换数据类型而不更改基础数据.
Y = typecast(X, DATATYPE)将X转换为DATATYPE.如果DATATYPE具有
比X类更少的位,则Y将具有比X更多的元素.如果
DATATYPE具有比X 类更多的位,则Y将具有
比X 更少的元素.

请注意,只有typecast当字节数相同时才可以使用,但这不是正确的,double因为它尝试以双精度表示尽可能接近的相同数字.例如,你不能强制转换uint32double,但你可以强制转换两个uint32来的一个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);