Average Error: 15.0 → 0.0
Time: 11.6s
Precision: 64
\[0.0 \le b \le a \le 1\]
\[\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}\]
\[\log \left(e^{\sqrt{\left|1 - \frac{b}{a} \cdot \frac{b}{a}\right|}}\right)\]
\sqrt{\left|\frac{a \cdot a - b \cdot b}{a \cdot a}\right|}
\log \left(e^{\sqrt{\left|1 - \frac{b}{a} \cdot \frac{b}{a}\right|}}\right)
double f(double a, double b) {
        double r63828 = a;
        double r63829 = r63828 * r63828;
        double r63830 = b;
        double r63831 = r63830 * r63830;
        double r63832 = r63829 - r63831;
        double r63833 = r63832 / r63829;
        double r63834 = fabs(r63833);
        double r63835 = sqrt(r63834);
        return r63835;
}

double f(double a, double b) {
        double r63836 = 1.0;
        double r63837 = b;
        double r63838 = a;
        double r63839 = r63837 / r63838;
        double r63840 = r63839 * r63839;
        double r63841 = r63836 - r63840;
        double r63842 = fabs(r63841);
        double r63843 = sqrt(r63842);
        double r63844 = exp(r63843);
        double r63845 = log(r63844);
        return r63845;
}

Error

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 15.0

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

    \[\leadsto \color{blue}{\sqrt{\left|1 - \frac{b \cdot b}{a \cdot a}\right|}}\]
  3. Using strategy rm
  4. Applied times-frac0.0

    \[\leadsto \sqrt{\left|1 - \color{blue}{\frac{b}{a} \cdot \frac{b}{a}}\right|}\]
  5. Using strategy rm
  6. Applied add-log-exp0.0

    \[\leadsto \color{blue}{\log \left(e^{\sqrt{\left|1 - \frac{b}{a} \cdot \frac{b}{a}\right|}}\right)}\]
  7. Final simplification0.0

    \[\leadsto \log \left(e^{\sqrt{\left|1 - \frac{b}{a} \cdot \frac{b}{a}\right|}}\right)\]

Reproduce

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