Hola,
Código java:
Ver originalpublic static void main
(String[] args
) { /* 6061970311763627 */
/* 158954731256AB */
double d = 6061970311763627d;
char s
[] = String.
format("%16x", bd
).
toCharArray(); }
El tipo de datos 'float' tiene una precisión de 6 digitos, por lo tanto se pierde parte del número desde el momento en que se almacena en un 'float'. El tipo de datos 'double' la precisión es de 15 digitos, cualquier número más grande pierde precisión (sino usa otro tipo de datos).
Al "convertir" de double a BigInteger se mantiene la precisión de los primeros 15 digitos.
Saludos,