我想这对大多数人来说相当容易,但我还是不知道... 我们举一个例子:我有号码
a=vpa('123456789123456789')
或
a=sym('123456789123456789')
此号码以正确的方式保存为符号编号,但是如果我通过输入
将其转换为双倍 b=double(a);
我得到一个计算错误;因此,如果我使用方法
dec2bin(b),
我没有得到确切的结果;那么有没有人知道如何获得正确的二进制表示? 你会帮助我很多 - 非常感谢你! :)
答案 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>
您可以使用浮点数执行相同的过程,并在达到足够小的位时停止。您只需要在存储二进制模式时要小心,以正确解释索引。