Quantization / quantisation
Не сжатие, но полезная штука. Мы ее в каждую статью пихали.
В общем виде этим занимается signal processing ( https://en.wikipedia.org/wiki/Quantization_(signal_processing) ).
Допустим, нам нужно хранить вещественные числа — результат вычислений или поток от точных сенсоров.
Если в double (и даже float) нам дорого, а fixed point библиотека нас не устраивает, используем квантизацию.
1) Линейная — отображаем множество значений (вероятно, бесконечное) на конечное множество нужного размера — например, 256.
Конвертируем линейной функцией — пара инструкций.
2) “раздаем” 256 значений не униформно как в (1), а согласно плотности распределения.
А где его взять? Как говорил Жеглов, для этого есть 3-й подход.
3) Согласно domain knowledge. Проще пояснить на примере.
Пусть у нас сенсор температуры снимает точные показания из нутра бойлера.
Отоброжать отрицательные значения и значения больше точки кипения не нужно — underflow/overflow для нас saturation.
0 – 5, записываем как 0. Если вода в бойлере замерзает, тут уже не до точности.
95 – 100 как 255. Все равно сейчас взорвется.
Изучаем рабочий диапазон бойлера в разные сезоны.
Для каждого сезона выделяем под основной сегмент много бит, чтобы получить нужную резолюцию,
а для остальных температур используем приближение военного времени.
4) Гибрид — разбиваем множество на несколько сегментов и в каждом сегменте используем линейную функций с опр. коэфициентом.
Бонус — квант. значения сжимаются куда лучше float/double.
Напоминает задачки на интервью всякие. =)
LikeLike
Смею заметить, задачки на интервью, как и анекдоты, они все из жизни.
LikeLike