Как преобразовать uint64_t в число double/float от 0 до 1 с максимальной точностью (С++)?C++

Программы на C++. Форум разработчиков
Anonymous
Как преобразовать uint64_t в число double/float от 0 до 1 с максимальной точностью (С++)?

Сообщение Anonymous »

Я пишу класс изображения на основе целых чисел без знака. В настоящее время я использую буферы uint8_t и uint16_t для 8-битных и 16-битных пикселей RGBA, и для преобразования из 16-битных в 8-битные мне просто нужно взять 16-битное значение, разделить на std::numeric_limits< uint16_t > ::max() преобразуется в двойное значение, а затем умножается на 255.

Однако, если бы я хотел иметь изображение с 64-битными целыми числами без знака для каждого компонента RGBA (я знаю, это абсурдно много), как мне найти число с плавающей точкой/двойное значение между 0 и 1, которое показывает, насколько далеко между 0 и максимальным значением uint64_t находится мое значение пикселя? Я предполагаю, что преобразование в двойные числа не сработает, потому что двойные числа обычно представляют собой 64-битные числа с плавающей запятой, и вы не можете захватить все 64-битные целочисленные значения без знака в 64-битное число с плавающей запятой. Деление без преобразования в числа с плавающей запятой/двойные числа дало бы мне просто 0, а иногда и 1.

Каков наиболее точный способ найти значение с плавающей запятой между 0 и 1, которое представляет, как далеко между 0 и максимально возможным 64-битным значением без знака?

Подробнее здесь: https://stackoverflow.com/questions/469 ... um-accurac

Вернуться в «C++»