dec2bin is not precise with 64 bits numbers
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi, I was trying to apply a left circular shift to a 64 bits number, when I notice that dec2bin does'nt work correctly, Have you any idea how to fix it? for example:
dec2bin(double(9223372036855037954))
ans =
1000000000000000000000000000000000000000000001000000000000000000
But the right anwser that I expect is:
1000000000000000000000000000000000000000000001000000000000000010
댓글 수: 0
답변 (4개)
Thomas
2012년 4월 2일
For dec2bin to work correctly it should be nonnegative integer smaller than 2^52
댓글 수: 0
Walter Roberson
2012년 4월 2일
double(9223372036855037954) is not a 64 bit number: it is an IEEE 754 Double Precision Floating Point number.
Please see http://www.mathworks.com/matlabcentral/answers/13142-dec2bin and in particular the last comment I made (about 64 bit constants.)
댓글 수: 0
John D'Errico
2012년 4월 2일
So use a tool (vpi, found on the FEX) designed to handle large numbers.
>> vpi2bin(vpi('9223372036855037954'))
ans =
1000000000000000000000000000000000000000000001000000000000000010
Or for that matter, if you like bigger numbers...
>> vpi2bin(vpi('92233720368556346354667564688567567858565037954'))
ans =
1000000100111111001110010111100011111000101000010100010011111110011000001110001001010001100001110111110110100110000010110001111110011111100101011111110000010
댓글 수: 3
Walter Roberson
2012년 5월 13일
vpi is a MATLAB File Exchange (FEX) contribution. You need to download it and install it on your machine.
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!