?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Flag Next Entry
packed float
nyaload
_winnie
Если допустимо округление float на ±0.1 процент, то можно хранить число как логарифм по основанию 2^(1/512). 2 байт хватит, что бы записать числа порядка 1.0e±18 (миллиард миллиардов). Деление и умножение - практически бесплатно, конверсию в double-float можно делать через таблицу с 512 элементами и битовые операции.

Сложение - дорогое и неточное. Это скорее для записи готового результата, а не для промежуточных вычислений.

Идея хранить логарифмы вместо чисел не нова. Но хочется обратить внимание на то, что логарифм можно хранить как небольшое целое число. В контексте записи звука или освещённости в пикселах - общее место, но в big data - не распространено.


  • 1
Допустимо - ИМХО почти везде :) Ты сколько весишь? Какой рост?

В то, что очень мало задач где такая экономия необходима и приемлемо ради этого терпеть геморрой с конвертацией и особой обработкой - в такое легко верится

(Deleted comment)
Это не half precision. Это просто показатель экспоненты в short. В моём случае - нужный только для сравнения и для деления (т.е. вычитания показтелей).

(Deleted comment)
(Deleted comment)
Ну так обычно вычислительные задачи не сводятся к расчету моей средней плотности. :) А при сколько-нибудь сложном счете стартовая относительная погрешность 10^{-3} быстро приведет к накоплению ошибок.

На самом деле такая идея не нова. Лет 15 назад на ее основе даже соорудили специализированную архитектуру (GRAPE), использовавшуюся для решения задач, которые на нее "ложились". Результаты оказались так себе - после первой эйфории достаточно быстро выяснилось, что в конечном счете обычные универсальные компьютеры оказываются выгоднее. Затем все бросились на расчеты на видеокартах, и о GRAPE забыли.

  • 1