dec2bin is not precise with 64 bits numbers
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (4)
Thomas
am 2 Apr. 2012
For dec2bin to work correctly it should be nonnegative integer smaller than 2^52
0 Kommentare
Walter Roberson
am 2 Apr. 2012
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 Kommentare
John D'Errico
am 2 Apr. 2012
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 Kommentare
Walter Roberson
am 13 Mai 2012
vpi is a MATLAB File Exchange (FEX) contribution. You need to download it and install it on your machine.
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!