fundo
O formato de ponto flutuante de precisão dupla IEEE 754 é uma maneira de representar números reais com 64 bits. Parece o seguinte:
Um número real n
é convertido double
em da da seguinte maneira:
- O bit do sinal
s
é 0 se o número for positivo, 1 caso contrário. - O valor absoluto de
n
é representado na forma2**y * 1.xxx
, ou seja, uma potência de 2 vezes a base . - O expoente
e
éy
(a potência de 2) menos 1023. - A fração
f
é axxx
parte (parte fracionária da base), levando os 52 bits mais significativos.
Por outro lado, um padrão de bits (definido por sinal s
, expoente e
e fração f
, cada um inteiro) representa o número:
(s ? -1 : 1) * 2 ** (e - 1023) * (1 + f / (2 ** 52))
Desafio
Dado um número real n
, imprima sua parte da fração de 52 bits da double
representação n
como um número inteiro.
Casos de teste
0.0 => 0
1.2 => 900719925474099 (hex 3333333333333)
3.1 => 2476979795053773 (hex 8cccccccccccd)
3.5 => 3377699720527872 (hex c000000000000)
10.0 => 1125899906842624 (hex 4000000000000)
1234567.0 => 798825262350336 (hex 2d68700000000)
1e-256 => 2258570371166019 (hex 8062864ac6f43)
1e+256 => 1495187628212028 (hex 54fdd7f73bf3c)
-0.0 => 0
-1.2 => 900719925474099 (hex 3333333333333)
-3.1 => 2476979795053773 (hex 8cccccccccccd)
-3.5 => 3377699720527872 (hex c000000000000)
-10.0 => 1125899906842624 (hex 4000000000000)
-1234567.0 => 798825262350336 (hex 2d68700000000)
-1e-256 => 2258570371166019 (hex 8062864ac6f43)
-1e+256 => 1495187628212028 (hex 54fdd7f73bf3c)
Você pode verificar outros números usando esta referência C, que usa campos de bits e uma união.
Observe que a resposta esperada é a mesma para +n
e -n
para qualquer número n
.
Entrada e saída
Aplicam-se regras padrão.
Formato de entrada aceito:
- Um número de ponto flutuante, pelo menos com
double
precisão internamente - Uma representação em seqüência do número em decimal (você não precisa suportar notação científica, pois pode usar
1000...00
ou0.0000...01
como entrada)
Para saída, um erro de arredondamento no bit menos significativo é tolerável.
Condição vencedora
Isso é código-golfe , então os bytes mais baixos em cada idioma vencem.