Как преобразовать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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