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)
如果你想保持相同的数字,你一定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')
=> int64_t x = 123; double X = reinterpret_cast<double>(x);