gpt4 book ai didi

c++ - 在 Matlab 中进行类型转换

转载 作者:太空狗 更新时间:2023-10-29 20:04:38 25 4
gpt4 key购买 nike

我理解了 typecast 在 Matlab 的帮助文件中是如何解释的。但无法应付我的结果。我尝试按如下方式对 3x4 矩阵进行类型转换。

A= -0.0022  -87.8788  -96.2848  -96.9586
0.9891 -52.9250 -52.7722 -52.7780
0.1473 -4.8680 -6.0184 -5.9894

ANS = typecast(A(:), 'uint16');

那么ANS vector 就变成了

ANS=65304
47886
13518
16253
55853
15894
49650
49839
45875
49747
50835
49307
37329
49856
5820
49747
38546
49344
60110
49857
7340
49747
43369
49343

这意味着 -0.0022 有两个 16 位值 65304 和 47886。它是如何计算的?那我怎么用C++实现呢?在 C++ 中,我实现了

float f = -0.0022;
unsigned short a = static_cast<unsigned int>(f);
unsigned short b = static_cast<unsigned int>(f)>>16;

我不能将 a 和 b 作为 65304 和 47886。

最佳答案

值 -0.0022 正在转换为两个 16 位值,这意味着您的值的类型为单精度(而非 double )。

我们换个方式试试

>> typecast(uint16([65304 47886]), 'single')

ans =

-0.0022

现在让我们看看这些值的十六进制表示形式:

>> format hex
>> uint16([65304 47886])

ans =

ff18 bb0e

>> d=typecast(uint16([65304 47886]), 'single')

d =

bb0eff18

现在您看到第一个值 65304 是 16 位 LSB,47886 是 16 位 MSB。因此,您的 C++ 实现是正确的。在 C++ 中无法获得正确值的原因是该值不完全等于 -0.0022。由于您的环境使用默认 format short 你看不到所有有效数字。如果你试试这个

>> format long e
>> typecast(uint16([65304 47886]), 'single')

ans =

-2.1819528e-003

或者在你的环境中使用

>> format long e
>> A(1)

您在数组中找到实际值,并在您的 C++ 代码中使用它,应该会返回正确的值。

关于c++ - 在 Matlab 中进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com