embedded-exp
Exponentielle en virgule fixe Q15 ultra-rapide et déterministe pour systèmes embarqués.
Update Version 0.3.0
Choix de #![forbid(unsafe_code)] pour plus de fiabilité, j'avais mis 0.2.0 en opt-level = 3 mais sur une pico 2040 ca risque de créer des problèmes.
⚠️ Disclaimer : Domaine de définition
Cette crate est optimisée pour le format Q15 signé (plage [-1.0, 1.0[).
En raison des contraintes mathématiques de ce format :
- Entrées négatives (x < 0) : Précision maximale (< 10 ULP). Idéal pour les fonctions d'activation (Sigmoïde, Softmax) et la décroissance de signaux.
- Entrées positives (x \geq 0) : Puisque e^x dépasse immédiatement 1.0, la fonction sature systématiquement à
i16::MAX(0.9999...).
🚀 Pourquoi embedded-exp ?
Dans le monde de l'embarqué (no_std), le calcul de l'exponentielle est souvent soit trop lourd (flottants/libm), soit imprécis. embedded-exp propose une approche purement entière optimisée pour les processeurs sans unité de calcul flottant (FPU) comme le RP2040 (Cortex-M0+), tout en brillant sur le RP2350 (Cortex-M33).
Points forts :
- Performance critique : Zéro division. Utilise des multiplications par l'inverse pour un gain de cycles massif.
- Déterminisme : Temps d'exécution constant, indispensable pour les noyaux temps réel (RTOS).
- Empreinte minimale : Aucune dépendance, pas de table de recherche (LUT) géante, juste des mathématiques pures.
- Précision : Erreur maximale < 10 ULP sur toute la plage utile.
📊 Algorithme
La crate utilise une réduction d'intervalle couplée à une approximation polynomiale de Taylor de degré 4 :
x = n·ln(2) + re^x = 2^n · e^r(le facteur 2^n est géré par un simple décalage de bits).e^rest calculé via Taylor sur l'intervalle [0, \ln(2)[.
🛠 Utilisation
Ajoutez ceci à votre Cargo.toml :
[]
= "0.3.0"
```rust
exp_q15;
{
// exp(-0.5) en Q15
// -0.5 réel = -16384 en Q15 (i16)
= exp_q15(-16384);
// Résultat : ~19874 (soit ~0.6065 réel)
"Résultat Q15 : {}", result);
}
⚖️ Licence Copyright (C) 2026 Jorge Andre Castro.
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de la licence, soit (à votre convention) n'importe quelle version ultérieure.