Я ищу способ представления диапазона значений: 0 - 18446744073709551615 с использованием менее 8 байт.Диапазон значений неподписанного qword (64-бит) с использованием меньших бит?
Я попытался придумать, как это можно сделать, но ничего не работает. В теории, например: Использование одного байта для представления битовой последовательности не менее 2 байтов. Однако 2 байта имеют число 65536 различных комбинаций бит, тогда как один байт дает нам диапазон значений 0-255 (256 комбинаций).
Лучшим способом, вероятно, было бы изменить значение бит. Это было бы хорошо, но не было бы потери точности.
Я начинаю думать, что это просто невозможно, хотя я хотел бы получить другие мнения и теорию по этому вопросу.
Существует 2 правила: # 1 Не может быть прецизионных потерь (т. Е. Все числа 0 - 18446744073709551615 должны быть представлены). # 2 Преобразование из стандартной 64-битной формы не должно приводить к необходимости более 7 байтов (56 бит).
Эти правила делают это особенно сложным.
Если все 2^64 числа все должны быть представима, то вы сделали. 63 бита могут представлять только половину из них. Если вы распакуете все 63-битные сжатые значения, вы получите, самое большее, половину 64-битных значений. Простой подсчет. 56 бит могут представлять только 1/256 числа. Вам нужно 64 бит. Период. –