Ну что, все, кто "ниасилил" фикс. точку, пошли искать процессоры с плавающей?
Ну, а если желание разобраться ещё осталось, могу дать ещё пару подсказок.
- Умножение формата 1.31*1.31 в стандартном "С" реализуется только с использованием целочисленного умножения формата 64*64. Большого смысла в такой реализации нет по причине низкой эффективности. Лучше поискать поддержку фикс. точки (для сигнальников - без проблем) или "прикрутить" её самому.
- Если компилятор "не понимает" формат и "не умеет" выполнять операции с фикс. точкой, простейший и наиболее эффективный путь реализации умножения - ассемблерный код.
Для умножения формата 1.31*1.31 с результатом в формате 1.31 используется целочисленное умножение в формате 32*32 с результатом в формате 64 (на ассемблере - без проблем). Промежуточный 64-битный целочисленный результат нормализуется (сдвиг точки и округление) в 32-битный результат с фикс. точкой.
- Даже если компилятор поддерживает типы с фикс. точкой, рекомендуется реализовать на ассемблере, с использованием промежуточных 64-бит, хотя бы "бабочку" БПФ.
П.С.
Способ реализации умножения 1.31*1.31 с результатом в формате 1.31 не отменяет того, что это 32-битная арифметика.
То же самое касается 32-битного формата с плавающей точкой.
Цитата(Golikov A. @ Aug 26 2013, 08:46)

он просто очень плохо объясняет... он предлагал 16 битный вход, и 32 битная арифметика, и
коэффиценты считать в 20 битах для 4К фурье
М.б., плохо объясняю. М.б., кое-кто невнимательно читает или не слишком точен в том, что пишет. Предлагал я несколько иное.