dec2bin is not precise with 64 bits numbers
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (4)
Thomas
el 2 de Abr. de 2012
For dec2bin to work correctly it should be nonnegative integer smaller than 2^52
0 comentarios
Walter Roberson
el 2 de Abr. de 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 comentarios
suzi freunden
el 2 de Abr. de 2012
1 comentario
Jan
el 13 de Mayo de 2012
BITSHIFT works correctly with UINT64 in 2009a. Only reading the value fails.
John D'Errico
el 2 de Abr. de 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 comentarios
Walter Roberson
el 13 de Mayo de 2012
vpi is a MATLAB File Exchange (FEX) contribution. You need to download it and install it on your machine.
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!