Возможно ли объединить число значений с плавающей запятой в одно значение с плавающей запятой и извлечь значения при необходимости? - PullRequest
0 голосов
/ 10 февраля 2012

Я работаю над алгоритмом для приложения для iPhone, где данные, которые мне нужно хранить в памяти, превышают лимит, поэтому можно представить число чисел с плавающей точкой как одно значение с плавающей запятой и извлекать их, когда мне это нужно.

Например:

float array[4];
array[0]=0.12324;
array[1]=0.56732;
array[2]=0.86555;
array[3]=0.34545;

float combinedvalue=?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Не в общем, нет. Вы не можете хранить 4N битов информации только в N битах.

Если в ваших номерах есть какой-то патен, то вы можете найти схему. Например, если все ваши числа имеют одинаковое значение, вы можете хранить только различия между числами с меньшей точностью.

Однако подобные вещи сложны и ограничены.

2 голосов
/ 10 февраля 2012

Если эти числа ровно по 5 цифр каждое, вы можете рассматривать их как целые числа, умножив их на 100000. Затем вам потребуется 17 бит для каждого числа, всего 68 бит, что (с некоторым смещением битов) занимает 9байт.Помогает ли это, 9 байтов вместо 16?

Обратите внимание, что реализация вашего алгоритма также займет память!

0 голосов
/ 11 февраля 2012

То, что вам нужно, может быть выполнено несколькими различными способами.

Например, в c ++ у вас обычно есть плавающие одинарной точности (4 байта) в качестве наименьшей доступной точности, хотя я не удивлюсь, если есть другие пакеты, которые обрабатывают значения с плавающей точкой меньшей точности. Поэтому, если вы используете значения с плавающей запятой двойной точности и можете обходиться с меньшей точностью, вы можете переключиться на меньшую точность.

Теперь, в зависимости от диапазона значений, которые вы хотите сохранить, вы также можете использовать представление с фиксированной точкой, но вам нужно будет знать нюансы сдвига и маскирования битов и т. Д. Но, Еще одно дополнительное преимущество этого подхода заключается в том, что он может ускорить выполнение вашей программы, поскольку арифметика с фиксированной (целой) точкой намного быстрее, чем арифметика с плавающей точкой.

Выбор параметров зависит от ваших данных, которые вы хотите сохранить, и от того, насколько вы удобны с бинарной арифметикой более низкого уровня.

...