Когда использовать Fixed Point в эти дни - PullRequest
22 голосов
/ 05 октября 2008

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

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

Ответы [ 7 ]

18 голосов
/ 05 октября 2008

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

17 голосов
/ 07 октября 2008

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

11 голосов
/ 05 октября 2008

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

5 голосов
/ 05 октября 2008

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

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

4 голосов
/ 05 октября 2008

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

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

1 голос
/ 28 мая 2012

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

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

0 голосов
/ 05 октября 2008

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

ИМХО, фиксированная точка необходима только при использовании DSP без аппаратной поддержки операций с плавающей запятой.

...