pub fn sqrt(a: i32) -> i32Expand description
Calcule la racine carrée d’un nombre en virgule fixe Q15.
§Arguments
a— valeur en Q15 dans[0, 32767](valeur_réelle = a / 32768.0)
§Retour
sqrt(a) en Q15. Retourne 0 si a <= 0.
§Précision
Erreur maximale < 150 ULP (unités au dernier rang) sur toute la plage, soit < 0.005 en valeur réelle.
§Algorithme
Newton-Raphson en arithmétique entière Q15 :
x_{n+1} = (x_n + a / x_n) / 2L’entrée est normalisée dans [0.5, 2.0[ avant l’itération,
puis dénormalisée via sqrt(a · 4^n) = 2^n · sqrt(a).
§Exemples
use embedded_sqrt::sqrt;
// sqrt(0.25) = 0.5 → 8192 → 16384
assert!((sqrt(8192) - 16384).abs() < 100);
// sqrt(≈1.0) = ≈1.0 → 32767 → 32767
assert!((sqrt(32767) - 32767).abs() < 150);
// valeurs négatives → 0
assert_eq!(sqrt(-1), 0);