?

Log in

No account? Create an account
nyaload

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

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

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

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

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


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

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

Если это делается ради компактного представления, то да, это можно делать. Но по-скорости это почти наверняка будет медленнее 4-byte floats. Если даже не существенно медленнее (то бишь раза в два-три). Если только проц не поддерживает такие операции напрямую. Я вот тут нашел некие упоминания возможности поддержки:
http://www.slideshare.net/ultrafilter/half-size-precision-for-speed-power-efficiency-idf-beijing-2012
Но я даже не знаю, реализовано это или нет.

Edited at 2013-03-10 08:14 pm (UTC)

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

Не понял, с каких это пор sqrt(2) - это погрешность в полпроцента?

Что?
2^(1/512) = 1.0014

А, пардон почему-то решил, что по основанию 2. Да получается не самая точность, можно, например, числа до 10^{-19} до 10^{+19} считать.

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

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

  • 1