Стандартные значения типа float и double равны 4 и 8 байтов, поэтому вы не можете напрямую упаковать два из них в один объект типа int 32 , поскольку он составляет всего 4 байта.
Однако вы можете определить 16-битный формат с ограниченной точностью и диапазоном экспоненты. (Я не проверял, был ли уже стандарт. Там, вероятно, есть, но это веселее.)
f e d c|b a 9 8|7 6 5 4|3 2 1 0
S E E E|E E m m|m m m m|m m m m
Мой новый формат, названный Ross-float, имеет знаковый бит, 5 битов показателя степени и 10 битов точности.
Этот формат может представлять целые числа в точности от -1023 до +1023, и он может представлять действительные числа в диапазоне от 10 -4,8 до 10 4,8 .
Обновление:
Хорошо, теперь вопрос изменился на long long , поэтому вся проблема становится тривиальной. Это также хорошо, потому что 16 бит недостаточно для хорошего числа с плавающей запятой.