Average Error: 14.4 → 0.0
Time: 8.9s
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 r24467 = a;
        double r24468 = r24467 * r24467;
        double r24469 = b;
        double r24470 = r24469 * r24469;
        double r24471 = r24468 - r24470;
        double r24472 = r24471 / r24468;
        double r24473 = fabs(r24472);
        double r24474 = sqrt(r24473);
        return r24474;
}

double f(double a, double b) {
        double r24475 = b;
        double r24476 = a;
        double r24477 = r24475 / r24476;
        double r24478 = -r24477;
        double r24479 = 1.0;
        double r24480 = fma(r24477, r24478, r24479);
        double r24481 = fabs(r24480);
        double r24482 = sqrt(r24481);
        return r24482;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.4

    \[\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}\]
  2. Taylor expanded around 0 14.4

    \[\leadsto \sqrt{\left|\color{blue}{1 - \frac{{b}^{2}}{{a}^{2}}}\right|}\]
  3. Simplified0.0

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

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

Reproduce

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