Average Error: 14.3 → 0.0
Time: 10.0s
Precision: 64
\[0.0 \le b \le a \le 1\]
\[\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}\]
\[\sqrt{\left|\mathsf{fma}\left(-\frac{b}{a}, \frac{b}{a}, 1\right)\right|}\]
\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}
\sqrt{\left|\mathsf{fma}\left(-\frac{b}{a}, \frac{b}{a}, 1\right)\right|}
double f(double a, double b) {
        double r77217 = a;
        double r77218 = r77217 * r77217;
        double r77219 = b;
        double r77220 = r77219 * r77219;
        double r77221 = r77218 - r77220;
        double r77222 = r77221 / r77218;
        double r77223 = fabs(r77222);
        double r77224 = sqrt(r77223);
        return r77224;
}

double f(double a, double b) {
        double r77225 = b;
        double r77226 = a;
        double r77227 = r77225 / r77226;
        double r77228 = -r77227;
        double r77229 = 1.0;
        double r77230 = fma(r77228, r77227, r77229);
        double r77231 = fabs(r77230);
        double r77232 = sqrt(r77231);
        return r77232;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.3

    \[\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\sqrt{\left|\mathsf{fma}\left(-\frac{b}{a}, \frac{b}{a}, 1\right)\right|}}\]
  3. Final simplification0.0

    \[\leadsto \sqrt{\left|\mathsf{fma}\left(-\frac{b}{a}, \frac{b}{a}, 1\right)\right|}\]

Reproduce

herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b)
  :name "Eccentricity of an ellipse"
  :pre (<= 0.0 b a 1.0)
  (sqrt (fabs (/ (- (* a a) (* b b)) (* a a)))))