что-то между int и float, чтобы зарезервировать меньше памяти, чем с float?

0

Мне нужно сохранить данные (malloc) memory (ram), которые имеют следующую форму:

34566,5
45,5
46,67
32
-4
58
-43,5
etc

Я имею в виду, что после запятой у данных не будет больше 2 цифр. Как-то я могу зарезервировать память без использования типа float? Заранее спасибо.

  • 3
    конечно, если вам никогда не нужно больше, чем +/- 2 ^ 31/100, тогда просто используйте int и знайте, что последние 2 десятичных знака неявно следуют после десятичного ... следите за умножением и делением, которые переместят это.
  • 6
    В типичном случае, число с плавающей точкой точно такого же размера, что и int (оба 32-битных в большинстве случаев). Вы можете использовать масштабированное int (т.е. хранить исходное число, умноженное на 100), хотя то, стоит ли это, во многом зависит от того, что вам нужно с ними делать.
Показать ещё 2 комментария
Теги:
malloc
memory-management

3 ответа

3

Зависит от количества цифр до запятой. Если вы знаете общее количество возможных значений, N, то вам понадобятся потолочные (log2 N) битовые значения, чтобы они могли представлять их все. Из этого вы можете найти самый маленький тип, который будет вписываться.

0

Если вы действительно заботитесь о памяти, и если вы можете указать, сколько бит вам нужно для хранения одного значения, вы можете решить, использовать ли встроенный тип или создать свой собственный. Я имею в виду, если вам, например, нужно 6 бит для хранения одного значения, вы можете создать контейнер, который будет хранить каждые 4 значения, используя 3 байта (3x char). Такой ограничитель должен был использовать операторы битов для доступа к значениям.

0

Похоже, что 16-разрядного целого не хватит, поэтому следующий обычно доступный тип данных представляет собой 32-разрядное целое число или float, что означает, что, вероятно, нет собственного типа данных, который в этом случае сохранил бы память. Вы можете создать настраиваемый тип фиксированной точки, который использует меньше битов (например, 24 бита, вероятно, будут самыми легкими: вы сохраните число, умноженное на 100 в целых трех байтах), но в целом я бы предложил посмотреть способы сжимать весь набор данных "на лету".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню