2014-12-25 5 views
0

Мне нужно хранить множество разных значений как удвоение от 0 до 1, чтобы иметь равномерное представление. Например, значение ARGB - это 32-разрядное целое число. Может удваивать однозначно представлять каждое целочисленное значение, если я храню его как обратное? Я знаю, что для этого достаточно бит, но я не уверен, предотвратит ли это экспоненциальное расстояние.Взаимное представление целых чисел в числах с плавающей запятой

ответ

0

Стандартная двойная имеет 52 бит мантиссы, поэтому да, она способна удерживать и точно воспроизводить 32-битное целое число. Другая проблема заключается в том, что они должны быть между 0 и 1. Ответный способ не такой, как! Контрпример: 1/3 не является точно представимым двойным. Вам нужно будет разделить значения, чтобы обеспечить диапазон. Вы можете разделить или умножить силы на две, чтобы сохранить точную точность. Поэтому, если у вас есть 32-значные значения без знака, они преобразуют их в double, а затем делят на 2^32. Если вы вернетесь, что при чтении значения должны быть воспроизведены точно. В C или C++ существуют даже специальные инструкции для непосредственного управления экспонентом и мантиссой с плавающей точкой или двойным, они могут быть более эффективными и безопасными.

+0

Извините, что я забыл ответить на это. Мои диапазоны всегда равны двум (например, 0x1/0xFFFF), поэтому это должно быть нормально. Так как это не узкое место, просто оставайтесь со стандартной арифметикой на данный момент :) – Shaggi

Смежные вопросы