您的代码相当于:
x=13339262925365424727;
dec2bin(x)
但是如果你检查 x 的值,你会发现它超出了双精度。这个数字太大了,无法存储在 64 位双精度数中。精度为2^11,检查eps(x)
为了处理大量数据,使用vpa
来自符号工具箱是一个不错的选择,可以使用吗?
这是使用vpa的解决方案:
function l=ldec2bin(x)
if x>2^52
head=floor(x/2^52);
tail=x-head*2^52;
l=[ldec2bin(head),dec2bin(double(tail),52)];
else
l=dec2bin(double(x));
end
end
usage:
>> ldec2bin(vpa('13339262925365424727'))
ans =
1011100100011110100101001111010011000111111100011011001001010111
/Update:
我遇到了一个更短的实现dec2bin
对于符号变量:
>> sdec2bin=@(x)(feval(symengine,'int2text',x,2))
sdec2bin =
@(x)(feval(symengine,'int2text',x,2))
>> sdec2bin(sym('13339262925365424727'))
ans =
1011100100011110100101001111010011000111111100011011001001010111