来自 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 值 MSB
和 LSB
;要将它们转换为 uint 64,您可以使用类型转换。
U = typecast([MSB,LSB],'uint64')
然后按照 m7913d
的建议转换为 double
D = double(U)
所以你看到 typecast
与 double
相比有一个非常不同的功能。
我正在将 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 forX
.
而 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 值 MSB
和 LSB
;要将它们转换为 uint 64,您可以使用类型转换。
U = typecast([MSB,LSB],'uint64')
然后按照 m7913d
的建议转换为 doubleD = double(U)
所以你看到 typecast
与 double
相比有一个非常不同的功能。