В качестве входных данных вы получите целое число kв диапазоне от -4503599627370496(−2 52 ) до 4503599627370496(2 52 ). Как хорошо известно , целые числа в этом диапазоне могут быть представлены в точности как значения с плавающей запятой двойной точности.
Вы должны выход на вес Хемминга (количество единиц) в кодировании kв формате binary64 . При этом используется 1 бит для знака, 11 бит для показателя степени (закодированный со смещением) и 52 для мантиссы; см. ссылку выше для деталей.
В качестве примера , число 22представляется как
0 10000000011 0110000000000000000000000000000000000000000000000000
Так как есть 5, выход 5.
Обратите внимание, что порядковый номер не влияет на результат, поэтому вы можете безопасно использовать фактическое внутреннее представление вашей машины значений двойной точности для вычисления выходных данных.
Дополнительные правила
- Программы или функции разрешены.
- Любой язык программирования может быть использован.
- Стандартные лазейки запрещены
- Введенный номер будет в десятичном виде. Помимо этого, средства ввода и вывода и формат, как обычно, являются гибкими .
- Самый короткий код в байтах побеждает.
Контрольные примеры
22 -> 5
714 -> 6
0 -> 0
1 -> 10
4503599627370496 -> 5
4503599627370495 -> 55
1024 -> 3
-1024 -> 4
-4096 -> 5
1000000000 -> 16
-12345678 -> 16
binary64целых чисел base2. В любом случае, если вам нужно обрабатывать их отдельно, возможно, стоит сделать что-то иное, нежели тип-каламбур и цикл по всем битам.
long, так что вы не могли бы просто сказать что-нибудь двоичное64 double, потому что не все двойные числа являются целыми числами. Но все целочисленные doubles могут быть преобразованы в longи обратно, вплоть до пределов long. (Как вы указали, обратное неверно. Вы получаете ближайшее представление double, предполагая режим округления по умолчанию). Во всяком случае, это был совершенно правильный способ задать вопрос; Я просто не прочитал это внимательно>. <
binary64формате с плавающей запятой , если они хотят? Некоторые люди (в том числе и я изначально) интерпретировали этот вопрос как требование, чтобы функции принимали входные данные как целочисленный тип, например Сиlong. В C вы можете утверждать, что язык будет конвертировать для вас, так же, как когда вы звонитеsqrt((int)foo). Но есть некоторые ответы asm для машинного кода x86 (например, codegolf.stackexchange.com/a/136360/30206 и мой), которые оба предполагали, что нам нужно принять 64-битные целочисленные входные данные. Принятиеbinary64значения сохранит 5 байтов.