Skip to main content

sqrt

Function sqrt 

Source
pub fn sqrt(a: i32) -> i32
Expand 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) / 2

L’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);