ControlDuino: Uma análise rasteira sobre viabilidade do uso de floats…

Uma das preocupações que tinha sobre esse projeto é quanto à precisão necessária para lidar com as variações das amostras. Será que a implementação da Atmel com relação ao float me deixará lidar com grandezas razoavelmente pequenas? Será que eu preciso lidar com doubles? Ou será que terei que implementar algum esquema de fixed point com precisão maior que a mantissa da precisão simples?

Desde o começo pensei em converter os valores obtidos das amostras — que, com 10 bits, estão no intervalo entre 0 e 1023 — em valores no intervalo entre 0.0 e 1.0. Com isso posso trabalhar com as grandezas em valores percentuais, característica de controladores PID que já mexi (há mais de uma década atrás!). Isso me dá uma exatidão necessária de \delta v=9.77517\cdot10^{-5} entre dois valores próximos que obterei da leitura do ADC. A conta é simples: O valor de cada passo é dado por \frac{1}{1023}.

Outra preocupação era com o valor de \delta t, em milissegundos. Supondo um \delta t de 10 ms (sampling rate de 100 sps), o valor, óbviamente, tem grandeza de 1.0\cdot10^{-2}. Isso implica que derivadas têm grandeza mínima de \frac{\delta v}{\delta t}, ou seja, 9.77517\cdot10^{-3}. E integração teria uma grandeza mínima de \delta v \cdot \delta t, ou seja, 9.77517\cdot10^{-7}.

Deu pra perceber que todos esses valores estão bem acima da precisão de 1 ULP, para valores entre 0.0 e 1.0, ou seja, FLT_EPSILON? O intervalo mais problemático, da ordem de 10^{-7} quando convertido para base 2, é da ordem de 2^{-17}:

\displaystyle log_2 \left(\frac{1}{1023}\cdot 10^{-2} \right)\approx -16.6

Isso significa que ainda posso “torrar” 6 bits na mantissa. Quer dizer, a variação na escala (no “deslocamento” da vírgula) será pequeno o suficiente para não afetar dramaticamente a precisão dos cálculos!

Resta agora verificar se a implementação da Atmel segue, de fato, o padrão IEEE 754…

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s