depende da plataforma!
exceto pelo PC mesmo, acho que nao tem nenhum processador sequer q eu trabalhe que tem fpu integrada, entao eu costumo nao usar ponto flutuante.
no caso dos DSPs, eh comum o uso de coeficientes reais que variam de 0 a 1. nesse caso eu uso ponto fixo direto, multiplicando por algum numero 2^n. depois de multiplicar pelos dados, apenas faco shift n, algo como:
- Código: Selecionar todos
y[i] += (k[i]*x[i])>>8;
supondo que o coeficiente k[i] foi previamente multiplicado por 256. isso eh um termo de um filtro qq em um DSP, onde y[] sao as saidas, k[] os coeficientes e x[] as entradas. como normalmente se trabalha com poucas entradas, o negocio eh meio realtime e tem que ser rapidao para rodar cada termo do filtro.
mas os DSPs tem multiplicacao bem veloz, pior eh nos 68xxx e HC908. dae eu tento usar artificios para evitar multiplicacao e divisao de inteiros mesmo, pq fica comprometendo a performance. no 68000 um div demora 144 clocks!
por exemplo, no lugar de incrementar um timestamp numa interrupcao de um segundo e depois quebrar com mod e div para imprimir:
- Código: Selecionar todos
int timestamp=0;
interrupt timer()
{
timestamp++;
}
printf("%d:%d:%d\n",timestamp/3600,(timestamp/60)%60,timestamp%60);
poderia ser mais interessante fazer:
- Código: Selecionar todos
char h=0,m=0,s=0;
interrupt timer()
{
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++
}
}
}
printf("%d:%d:%d\n",h,m,s);
com isso evita-se varios div e mod o tempo todo. mesmo num coldfire rapido jah tive que lutar para econimizar uns clocks, pq mesmo sendo rapido, precisava trabalhar em realtime e nao podia ficar muito tempo parado nas interrupcoes.
vc pode analisar isso e aplicar em todo lugar, questao de verificar:
a) onde posso usar ponto fixo no lugar de ponto flutuante
b) onde quebrar em mais variaveis eh vantagem
c) onde posso arredondar para 2^n
d) onde posso trocar mul e div por shift
e) onde posso trocar mod por and
e por ae vai...o lado ruim disso tudo eh q obfusca o codigo, fica dificil das pessoas entenderem o que vc quer fazer hehehe
ah! eu tb nao uso printf padrao, uso a printf que eu mesmo fiz, dae consome menos memoria! hehehe