Дано double x
и предполагается, что оно лежит в [0,1]
.Предположим, например, что x = 0.3 В двоичном коде (с сохранением 10 цифр после десятичной точки) он представлен как
x=0.0100110011...
Я хочу написать некоторый код C ++, который будет извлекать 10 цифр, показанных после десятичной дробиточка.Другими словами, я хочу извлечь целое число (0100110011) _2.
Теперь я совершенно новичок в битовом сдвиге, и (наивное) решение, которое у меня есть для этой проблемы, следующее
int temp= (int) (x*(1<<10))
Тогда temp
в двоичном коде будет иметь необходимые 10 цифр.
Это безопасный способ выполнить описанный выше процесс?ИЛИ есть более безопасные / более правильные способы сделать это?
Примечание : я не хочу, чтобы цифры извлекались в виде массива символов.Я специально хочу целое число (или целое число без знака) для этого.Причиной этого является то, что при генерации октодей точкам в пространстве присваиваются хеш-ключи в зависимости от их положения, называемого Morton Keys.Эти ключи обычно хранятся как целые числа.После получения целых ключей для всех точек они затем сортируются.Теоретически эти ключи могут быть получены путем масштабирования координат до [0,1], извлечения битов и их чередования.