Discussion:Micro contrôleurs AVR/Arduino
Intérêt de CORDIC ?
modifierJe peux comprendre l'utilité de CORDIC dans un FPGA, mais je ne vois pas du tout l'intérêt de présenter cet algorithme dans un chapitre dédié à l'Arduino. C'est une méthode à la fois très lente et très peu précise. Les Arduinos, et les ATmega en général, possèdent un multiplieur matériel qui leur permet d'évaluer des polynômes de manière efficace. J'ai utilisé un polynôme d'approximation de degré 6 pour implémenter un cosinus en virgule fixe, et le résultat est 18 fois plus rapide et presque 15 fois plus précis que votre fonction cordic().
Voici les résultats de mes tests de performance comparatifs :
précision | temps | fonction |
---|---|---|
2,98 × 10−8 | 107,5 µs | cos() (avr-libc) |
9,53 × 10−5 | 6,77 µs | cos_fix() (polynôme) |
1,39 × 10−3 | 124,3 µs | cordic() |
Comme vous voyez, le polynôme d'approximation en virgule fixe permet un grand gain en rapidité, au prix d'une précision dégradée. La fonction cordic(), quant à elle, réussit à être plus lente que la fonction de référence en virgule flottante : c'est à la fois la plus lente et la moins précise parmi ces trois alternatives.