Подтвердить что ты не робот

Когда использовать Fixed Point в эти дни

Для интенсивного хрустания числа я рассматриваю возможность использования неподвижной точки вместо плавающей запятой. Конечно, будет важно, сколько байтов имеет тип фиксированной точки в размере, на каком процессоре он будет работать, если я могу использовать (для Intel) MMX или SSE или что-то новое...

Мне интересно, будут ли в эти дни, когда плавающая точка работает быстрее, чем когда-либо, стоит ли считать ее неподвижной точкой? Существуют ли общие правила, где мы можем сказать, что это будет иметь значение более чем на несколько процентов? Что представляет собой обзор с 35 000 футов цифровой производительности? (BTW, я предполагаю, что центральный процессор находится на большинстве компьютеров, а не в DSP или специализированных встроенных системах.)

4b9b3361

Ответ 1

Это все еще стоит того. Плавающая точка быстрее, чем в прошлом, но фиксированная точка также. И исправлено все еще единственный способ пойти, если вы заботитесь о точности, превышающей гарантированную IEEE 754.

Ответ 2

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

Ответ 3

Еще одна веская причина использовать фиксированный десятичный знак - то, что округление намного проще и предсказуемо. Большая часть финансового программного обеспечения использует десятичные запятые с фиксированной точкой с полуточным округлением для представления денег.

Ответ 4

Его почти ВСЕГДА быстрее использовать фиксированную точку (опыт x86, pentium, 68k и ARM). Однако он может также зависеть от типа приложения. Для графического программирования (одно из моих основных применений фиксированной точки) я смог оптимизировать код с использованием предварительно построенных косинусных таблиц, журнальных таблиц и т.д. Но и основные математические операции также оказались более быстрыми.

Комментарий к финансовому программному обеспечению. В более раннем ответе было сказано, что фиксированная точка полезна для финансовых расчетов. По моему собственному опыту (разработка системы управления крупными казначейскими операциями и обширный опыт обработки кредитных карт) я бы НЕ использовал фиксированную точку. У вас будут ошибки округления с использованием либо плавающей, либо фиксированной точки. Мы всегда используем целые суммы для представления денежных сумм, считая минимальную возможную сумму (1c за евро или доллар). Это гарантирует, что частичные суммы не теряются. При выполнении сложных вычислений значения преобразуются в двойные числа, применяются прикладные правила округления, и результаты преобразуются обратно в целые числа.

Ответ 5

Использовать фиксированную точку, если аппаратное обеспечение не поддерживает с плавающей запятой или аппаратную реализацию.

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

Ответ 6

Другой причиной использования фиксированной точки является то, что устройства ARM, такие как мобильные телефоны и планшеты, не имеют FPU (по крайней мере, многие из них).

Для разработки приложений реального времени имеет смысл оптимизировать функции с использованием арифметики с фиксированной точкой. Существуют реализации FFT (Fast Fourier Transform), очень важные для графики, которые основывают свои улучшения на эффективности на использовании арифметики с плавающей запятой.

Ответ 7

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

IMHO, фиксированная точка нужна только тогда, когда вы используете DSP без аппаратной поддержки операций с плавающей запятой.