Se le dará como entrada un número entero k
en el rango de -4503599627370496
(−2 52 ) a 4503599627370496
(2 52 ). Como es bien sabido , los enteros en este rango se pueden representar exactamente como valores de punto flotante de doble precisión.
Debe generar el peso de Hamming (número de unidades ) de la codificación k
en formato binario64 . Utiliza 1 bit para el signo, 11 bits para el exponente (codificado con un desplazamiento) y 52 para la mantisa; ver el enlace de arriba para más detalles.
Como ejemplo , el número 22
se representa como
0 10000000011 0110000000000000000000000000000000000000000000000000
Como hay 5
unos, la salida es 5
.
Tenga en cuenta que la resistencia no afecta el resultado, por lo que puede utilizar de forma segura la representación interna real de su máquina de valores de doble precisión para calcular la salida.
Reglas adicionales
- Se permiten programas o funciones .
- Se puede usar cualquier lenguaje de programación .
- Las lagunas estándar están prohibidas
- El número de entrada estará en decimal. Aparte de eso, los medios de entrada / salida y el formato son flexibles como de costumbre.
- El código más corto en bytes gana.
Casos de prueba
22 -> 5
714 -> 6
0 -> 0
1 -> 10
4503599627370496 -> 5
4503599627370495 -> 55
1024 -> 3
-1024 -> 4
-4096 -> 5
1000000000 -> 16
-12345678 -> 16
binary64
como enteros base2. Si necesita manejarlos por separado de todos modos, podría valer la pena hacer algo más que escribir un punzón y recorrer todos los bits.
long
, por lo que no podrías decir cualquier binario64 double
, porque no todos los dobles son enteros. Pero todos los double
s con valores enteros se pueden convertir ay long
viceversa, hasta los límites de long
. (Como señala, lo contrario no es cierto. Obtiene el representable más cercano double
, asumiendo el modo de redondeo predeterminado). De todos modos, esta era una forma totalmente válida de configurar la pregunta; Simplemente no lo leí con cuidado>. <
binary64
formato de punto flotante si lo desean? Algunas personas (incluido yo mismo, en un principio) estaban interpretando la pregunta como que las funciones aceptan entradas como un tipo entero de como Clong
. En C, puede argumentar que el lenguaje se convertirá por usted, como cuando llamasqrt((int)foo)
. Pero hay algunas respuestas asm de código máquina x86 (como codegolf.stackexchange.com/a/136360/30206 y la mía) que suponían que teníamos que aceptar entradas enteras de 64 bits. Aceptar unbinary64
valor ahorraría 5 bytes.