O mesmo sistema de processamento de sinal digital AMD X86-64 de ponto flutuante mencionado na pergunta anterior tem um problema em que às vezes diminui substancialmente quando os sinais atingem valores muito próximos (mas não exatamente) a zero.
O problema é que os valores de ponto flutuante desnormalizados requerem processamento especial pela CPU, que é muito mais lento do que lidar com valores normais de ponto flutuante. Isso pode fazer com que o sistema DSP seja executado muito lentamente - levando mais de para calcular tudo o que precisa ser calculado em um ciclo.
Uma solução alternativa é adicionar um pequeno deslocamento a todos os números para forçá-los ao intervalo de números normais. Existe uma maneira de instruir a FPU a simplesmente não gerar números desnormais em primeiro lugar?
O sistema operacional é Linux e o compilador é gcc
.
EDIT: Além disso, quais são as consequências numéricas da desativação de números desnormais?
fonte
sincos
, etc.Respostas:
Você pode forçar números desnormais a zero definindo os bits "flush to zero" e "denormals are zero" (15,6) no registro MXCSR .
fonte