Average Error: 0.2 → 0.0
Time: 19.5s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
\[{\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)} + \left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot 4 - 1\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1
{\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)} + \left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot 4 - 1\right)
double f(double a, double b) {
        double r186991 = a;
        double r186992 = r186991 * r186991;
        double r186993 = b;
        double r186994 = r186993 * r186993;
        double r186995 = r186992 + r186994;
        double r186996 = 2.0;
        double r186997 = pow(r186995, r186996);
        double r186998 = 4.0;
        double r186999 = 1.0;
        double r187000 = r186999 - r186991;
        double r187001 = r186992 * r187000;
        double r187002 = 3.0;
        double r187003 = r187002 + r186991;
        double r187004 = r186994 * r187003;
        double r187005 = r187001 + r187004;
        double r187006 = r186998 * r187005;
        double r187007 = r186997 + r187006;
        double r187008 = r187007 - r186999;
        return r187008;
}

double f(double a, double b) {
        double r187009 = a;
        double r187010 = b;
        double r187011 = hypot(r187009, r187010);
        double r187012 = 2.0;
        double r187013 = 2.0;
        double r187014 = r187012 * r187013;
        double r187015 = pow(r187011, r187014);
        double r187016 = r187009 * r187009;
        double r187017 = 1.0;
        double r187018 = r187017 - r187009;
        double r187019 = r187010 * r187010;
        double r187020 = 3.0;
        double r187021 = r187020 + r187009;
        double r187022 = r187019 * r187021;
        double r187023 = fma(r187016, r187018, r187022);
        double r187024 = 4.0;
        double r187025 = r187023 * r187024;
        double r187026 = r187025 - r187017;
        double r187027 = r187015 + r187026;
        return r187027;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 0.2

    \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt0.2

    \[\leadsto \left({\color{blue}{\left(\sqrt{a \cdot a + b \cdot b} \cdot \sqrt{a \cdot a + b \cdot b}\right)}}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  4. Applied unpow-prod-down0.2

    \[\leadsto \left(\color{blue}{{\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2} \cdot {\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  5. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}, {\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}, 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right)} - 1\]
  6. Using strategy rm
  7. Applied fma-udef0.2

    \[\leadsto \color{blue}{\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2} \cdot {\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right)} - 1\]
  8. Simplified0.0

    \[\leadsto \left(\color{blue}{{\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)}} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  9. Using strategy rm
  10. Applied associate--l+0.0

    \[\leadsto \color{blue}{{\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)} + \left(4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right) - 1\right)}\]
  11. Simplified0.0

    \[\leadsto {\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)} + \color{blue}{\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot 4 - 1\right)}\]
  12. Final simplification0.0

    \[\leadsto {\left(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 \cdot 2\right)} + \left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot 4 - 1\right)\]

Reproduce

herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (- 1.0 a)) (* (* b b) (+ 3.0 a))))) 1.0))