如何在matlab中将vpa数/符号数转换为二进制格式?

时间:2016-01-15 15:01:13

标签: matlab

我想这对大多数人来说相当容易,但我还是不知道... 我们举一个例子:我有号码

 a=vpa('123456789123456789')

 a=sym('123456789123456789')

此号码以正确的方式保存为符号编号,但是如果我通过输入

将其转换为双倍
 b=double(a);

我得到一个计算错误;因此,如果我使用方法

 dec2bin(b), 

我没有得到确切的结果;那么有没有人知道如何获得正确的二进制表示? 你会帮助我很多 - 非常感谢你! :)

1 个答案:

答案 0 :(得分:1)

在找到更好的解决方案之前,你可以强制使用二进制表示,利用log2()适用于符号数组的事实。

您可以连续搜索a的最高非零位,如下所示:

a = vpa('123456789123456789');

onebits = [];
onebit = floor(log2(a));
while onebit>=0
   onebits = [onebits onebit];
   a = a - 2^onebit;
   onebit = floor(log2(a));
end

% construct binary representation
a_bin = zeros(1,max(double(onebits))+1);
a_bin(onebits+1) = 1;   %take care: coeff of 2^0 will be index 1
a_bin = fliplr(a_bin);  %put highest bit first

结果将是整数 a的二进制表示。如果您愿意,可以使用num2str()sprintf('%d',a_bin)转换为字符串。

如果您使用足够小的测试编号(适用于bin2dec,即最多52位),您将看到bin2dec(sprintf('%d',a_bin))确实会恢复原始整数。< / p>

您可以使用浮点数执行相同的过程,并在达到足够小的位时停止。您只需要在存储二进制模式时要小心,以正确解释索引。