Average Error: 30.3 → 8.1
Time: 9.8s
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 r72704 = a;
        double r72705 = r72704 * r72704;
        double r72706 = b;
        double r72707 = r72706 * r72706;
        double r72708 = r72705 - r72707;
        double r72709 = r72708 / r72705;
        double r72710 = fabs(r72709);
        double r72711 = sqrt(r72710);
        return r72711;
}

double f(double a, double b) {
        double r72712 = b;
        double r72713 = a;
        double r72714 = r72712 / r72713;
        double r72715 = -r72714;
        double r72716 = 1.0;
        double r72717 = fma(r72715, r72714, r72716);
        double r72718 = fabs(r72717);
        double r72719 = sqrt(r72718);
        return r72719;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 30.3

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

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

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

Reproduce

herbie shell --seed 2019179 +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)))))