вопервых,
Цитата(B1sh0p @ Jun 18 2009, 05:47)

Код
fUin1 = ( P00 = FALSE ) ? FALSE : 4096;
почему Вас компилятор не предупреждает о возможной ошибке, ведь в скобках подразумевается "==", а не "=" ?
Далее у Вас несколько раз встречаются конструкции вида
Код
fU6 = 10 * fU7 + 10 * fU7_1 + fU6_1;
Ведь можно общий множитель вынести за скобку. У silabs есть такой документ "CIP-51 Performance for Standard Library Math Routines". Так вот, там написано, что среднее время выполнения умножения float больше чем сложение.
Непонятны строки
Код
fUosh = 5.21 * fUin - 5.84 * fU7; <-откуда берется fUin ?
fUnkz - 10 * fUin + fU2 - 0.1 * fU7 - 15 * fU8 + 2.33 * fU5; <-чему это все присваивается?
Так как не все величины в Вашем коде понятны, откуда они берутся, то полностью оптимизированный код дать не получится. Мой совет - переводите все в long. В этом случае на умножении Вы не сильно выиграете, а на сложениях-вычитаниях ускорение почти в 10 раз. Например:
Код
fU7 = 1229 * (fUoc - 2048 ); //1228,8=4,8*256
//.......
fUf=64*(fUosh- fUosh_1-fUf)/256; //например так всесто fUf = 0.25 * fUosh + (-0.25 * fUosh_1 - 0.25 * fUf );
//а можно в этом месте на 256 не делить
Вы что-то типа фильтров описываете, но я в Вашем описании не разобрался

, поэтому придется Вам самому дальше разбираться. Например, в последней моей строке если не делить на 256 может начаться переполнение.